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

Он не работал, потом устал: - [ 114]

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 

Это не сработало. Что не так и как я могу это сделать? Кроме того, это долго. Как я могу разбить его на несколько строк?

0
задан 22 May 2019 в 18:33

1 ответ

В sed, \< соответствует «началу слова», тогда как обычный < соответствует буквально.

Для более удобочитаемой замены измените разделители:

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

Нет необходимости ставить точки с обратной косой чертой в заменяемой части.

Вы можете дополнительно сократить инструкцию, используя захват:

sed -i 's=<\(/etc/dovecot/private/dovecot\.pem\)=\1=g'
0
ответ дан 22 May 2019 в 18:33

Другие вопросы по тегам:

Похожие вопросы: