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'

関連情報