почему 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'

Связанный контент