仅删除特定字符前面的空格.使用自由办公正则表达式引擎



我正在尝试在 Libre Office 的正则表达式引擎和 ubuntu 终端中的 sed 中执行此操作。

1.示例字符串:

-Polizeiwache (f)police station
-Freibad (n)open-air swimming pool

2.期望的输出:

-Polizeiwache (f)policestation
-Freibad (n)open-airswimmingpool

我一直在尝试选择字符)并将每个后续空格替换为任何内容。

任何帮助,不胜感激。

你想完成什么还不清楚。 您的文本显示"替换每个",但您的示例显示仅替换第一个空格。 要替换每个:

sed 'h;s/[^)]*//;s/ //g;x;s/).*//;G;s/n//'

这是做什么的:

  • h将行复制到 SED 的保留空间
  • s/[^)]*//替换 not-a-) 重复,没有任何内容。 这将删除该行的第一部分。
  • s/ //g用任何内容替换空白。 g选项说每次出现都做。 现在我们有了我们想要的第二部分。
  • x交换保持空间和模式(工作)空间。 现在我们再次在模式空间中使用整条线。
  • s/).*//替换 ),后跟任何字符序列,没有任何内容。 现在我们有了该行的第一部分。
  • G追加保留空间。 现在我们重新加入了整行(第二部分编辑),用换行符分隔。
  • s/n//删除中间的换行符。

你可以试试这个:

sed -i.bak 's/()[^ ]*) /1/g' yourfile

图案详情:

(      # open the capture group 1
)       # a literal closing parenthesis
[^ ]*   # zero or more (*) characters that are not a space [^ ] 
)      # close the capture group 1
        # a space (do you see it?)

1是对捕获组 1 的反向引用,显然它包含该组中已匹配的所有内容。由于空间不在组中,因此将删除该空间。

g代表全球研究

这是一个awk

awk -F) '{gsub(/ /,"",$NF)}1' OFS=) file
-Polizeiwache (f)policestation
-Freibad (n)open-airswimmingpool

它将)设置为归档分隔符,然后从最后一个字段中删除空格。


或者,如果您只想更改第一个空格,请使用 sub 而不是 gsub

awk -F) '{sub(/ /,"",$NF)}1' OFS=) file
-Polizeiwache (f)policestation
-Freibad (n)open-airswimming pool

最新更新