複数行のコードをsedに置き換える方法は?

複数行のコードをsedに置き換える方法は?

特殊文字を含む大容量ファイルがあります。私が使用したい複数行のコードがありますsed

これ:

  text = "\
    ------                                                           ------\n\n\
    This message was automatically generated by email software\n\
    The delivery of your message has not been affected.\n\n\
    ------                                                           ------\n\n"

次のようにする必要があります。

text = ""

次のコードを試しましたが、運がありません。

sed -i '/  text = "*/ {N; s/  text = .*affected.\./  text = ""/g}' /etc/exim.conf

何も置換せず、エラーメッセージも表示しません。

私はそれで遊んだが、試したことはすべてうまくいきません。

ベストアンサー1

Perlが構造に来ます:

perl -i~ -0777 -pe 's/text = "[^"]+"/text = ""/g' input-file
  • -i~ファイルは「所定の位置」で編集され、バックアップコピーは残されます。
  • -07771行ずつ読み込むのではなく、ファイル全体を一度に読みます。

置換はs///sedと同様に機能します(つまり、text = "二重引用符を除くすべての項目、二重引用符まで複数回一致)。ただし、この場合はファイル全体に適用されます。

おすすめ記事