使用 sed 正则表达式时,有没有一种方法可以在搜索词中使用标点符号,而无需在替换过程中实际更改它

使用 sed 正则表达式时,有没有一种方法可以在搜索词中使用标点符号,而无需在替换过程中实际更改它

假设我想将 XOrg[ ,.;] 替换为 X-Org[同时保持标点符号完整]。所以 XOrg 会给出 X-Org,而“XOrg”会给出“X-Org”等等。

有没有办法在linux终端上使用sed来做到这一点?

现在我可以做

  sed -r 's/XOrg[ ,.;]/X-Org/g'

但在这里我必须选择在另一端出现哪个标点符号。我如何告诉它保留它找到的标点符号?

答案1

我刚刚在这里找到了答案:http://www.grymoire.com/Unix/Sed.html#uh-4a

要通过一系列字符(例如标点符号和空格)分隔搜索词并将这些字符保留到输出而不是被替换,您可以使用以下合成:

    sed -r 's/([group1])term([group2])/\1output\2/g' 

其中 ([groupx]) 可以是 ([ ,.;)(]) 或 ([[:punct:] ])。

前任。

   echo dep\!|sed -r 's/dep([ ,.;)!])/dependency\1/' 

将给出: dep! -> 依赖!

  echo ' dep,'|sed -r 's/([[:punct:] ])dep([[:punct:] ])/\1dependency\2/' 

将给出 'dep,' -> 'dependency,'

相关内容