为什么 sed 没有替换特殊字符

为什么 sed 没有替换特殊字符

我正在尝试用空字符或无字符替换此文件 /etc/dovecot/conf.d/10-ssl.conf 中的字符 <

我的脚本是

sudo sed -i 's/\<\/etc\/dovecot\/private\/dovecot\.pem/\/etc\/dovecot\/private\/dovecot\.pem/g' /etc/dovecot/conf.d/10-ssl.conf 

它没有起作用,然后就累了:-

sudo sed -i '0,/\<\/etc\/dovecot\/private\/dovecot\.pem/s/\<\/etc\/dovecot\/private\/dovecot\.pem/\/etc\/dovecot\/private\/dovecot\.pem/' /etc/dovecot/conf.d/10-ssl.conf 

效果不太好。哪里出了问题,我该怎么做?而且它太长了。我该如何将其拆分成多行?

答案1

在 sed 中,\<匹配“单词的开头”,而 plain 则按<字面意思匹配。

为了使替换更易读,请更改分隔符:

sed -i 's=</etc/dovecot/private/dovecot\.pem=/etc/dovecot/private/dovecot.pem=g'

替换部分中无需使用反斜杠点。

您可以使用捕获进一步缩短指令:

sed -i 's=<\(/etc/dovecot/private/dovecot\.pem\)=\1=g'

相关内容