我正在尝试在 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