por que o sed não está substituindo o caractere especial

por que o sed não está substituindo o caractere especial

Estou tentando substituir charater < por vazio ou nenhum caractere neste arquivo /etc/dovecot/conf.d/10-ssl.conf

Meu roteiro é

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

Não funcionou então cansado: -

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 

Não funcionou tão bem. O que há de errado e como posso fazer isso? Além disso, é longo. Como posso dividir várias linhas?

Responder1

Em sed, \<corresponde ao "início de uma palavra", enquanto plain <corresponde literalmente.

Para uma substituição mais legível, altere os delimitadores:

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

Não há necessidade de barra invertida na peça de reposição.

Você pode encurtar ainda mais a instrução usando uma captura:

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

informação relacionada