仅删除特定字符之前的白色 space。带有自由办公室正则表达式引擎

Only remove white space which precedes a specific character. with libre office regex engine

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

1.Example 字符串:

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

2.Desired 输出:

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

我一直在尝试 select 字符 ) 并用任何内容替换每个后续的 space。

感谢任何帮助。

你可以试试这个:

sed -i.bak 's/\()[^ ]*\) //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?)

</code> 是对捕获组 1 的反向引用,显然它包含该组中所有已匹配的内容。由于 space 不在组中,因此将其删除。</p> <p><code>g代表全球研究

您试图完成的事情尚不清楚。您的文字显示 "replace every",但您的示例显示仅替换第一个 space。替换每个:

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

这是做什么的:

  • h 将行复制到 sed 的保留 space
  • s/[^)]*// 替换 not-a-) 没有重复。这将删除该行的第一部分。
  • s/ //g 空空如也。 g 选项表示每次出现都执行。现在我们有了我们想要的第二部分。
  • x 交换持有 space 和模式(工作)space。现在我们又在模式 space 中有了整行。
  • s/).*// 替换 ) 后跟任何字符序列。现在我们有了该行的第一部分。
  • G 追加保留 space。现在我们重新加入了整行(编辑的第二部分),用换行符分隔。
  • s/\n//去掉中间的换行符。

这是一个awk

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

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


或者,如果您只想先更改 space,请使用 sub 而不是 gsub

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