warum sed Sonderzeichen nicht ersetzt

warum sed Sonderzeichen nicht ersetzt

Ich versuche, das Zeichen < in dieser Datei /etc/dovecot/conf.d/10-ssl.conf durch ein leeres oder kein Zeichen zu ersetzen.

Mein Skript ist

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

Es hat nicht funktioniert, dann müde: -

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 

Es hat nicht so gut funktioniert. Was ist falsch und wie kann ich es machen? Außerdem ist es lang. Wie kann ich es in mehrere Zeilen aufteilen?

Antwort1

In sed \<wird der „Anfang eines Wortes“ abgeglichen, während plain <wörtlich abgeglichen wird.

Für eine besser lesbare Ersetzung ändern Sie die Trennzeichen:

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

Im Ersatzteil sind keine Backslash-Punkte erforderlich.

Sie können die Anweisung noch weiter verkürzen, indem Sie ein Capture verwenden:

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

verwandte Informationen