為什麼 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'

相關內容