![使用 sed 正则表达式时,有没有一种方法可以在搜索词中使用标点符号,而无需在替换过程中实际更改它](https://linux22.com/image/131612/%E4%BD%BF%E7%94%A8%20sed%20%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%97%B6%EF%BC%8C%E6%9C%89%E6%B2%A1%E6%9C%89%E4%B8%80%E7%A7%8D%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E5%9C%A8%E6%90%9C%E7%B4%A2%E8%AF%8D%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%A0%87%E7%82%B9%E7%AC%A6%E5%8F%B7%EF%BC%8C%E8%80%8C%E6%97%A0%E9%9C%80%E5%9C%A8%E6%9B%BF%E6%8D%A2%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%AE%9E%E9%99%85%E6%9B%B4%E6%94%B9%E5%AE%83.png)
假设我想将 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,'