sed は、順序付けされていない複数の文字列を含む行の後に追加します。

sed は、順序付けされていない複数の文字列を含む行の後に追加します。

appendstringsedを使用してandを含む行の後に追加しようとしています。HelloWorld

Hello something here World
World fsf Hello

順序を考慮すると、次のように動作します。

sed -i '/Hello*World\|World*Hello/a appendstring' file

しかし、一致させる文字列がたくさんあり、順序が合わない場合は確かに動作しません。

その後、順序に関係なく、2つの文字列を含む行を削除する方法を説明する別のリンクで解決策を試しました。

https://stackoverflow.com/questions/28561519/delete-lines-that-c​​ontain-two-strings

しかし、

sed -i '/Hello/!b;/World/d' file

これは削除にも適用されません。

以下は、この質問に対する答えの1つです。

sed -i '/Hello/{/World/d}' file

働く、それで、Appendで実装してみました。使用:

sed -i '/Hello/{/World/a} appendstring' file

しかし、エラーが発生しました。

sed: -e expression #1, char 0: unmatched `{'

修正する: リンクの投稿には!bという解決策が記載されています。感嘆符のため、cshellでは機能しませんが、shとbashでは機能します。スクリプト内でsedを実行するときに複数行を挿入し、大きな段落を追加するように簡単に拡張できます。

sed -i '/Hello/!b; /World/a \
addline \
addanotherline ' file

ベストアンサー1

今ほぼ十分に食べました。

sed -i '/Hello/{/World/a} appendstring' file

主張を分離する必要があります。次のように使用してください-e

sed -i -e '/Hello/{/World/a appendstring' -e '}' file

ご利用時に参考にしてください-i改行文字のないpendコマンドは、スイッチと同様にGNU拡張です。


これをより便利にし、複数の文字列一致の可能性を考慮するには、次のことを試してください。

sed '/multiple/{/words/{/to/{/match/ s/$/append this/;};};}' file > newfile
mv newfile file

すでにGNU Sedを使用しているので、次を使用してください。

sed -i -e '/multiple/{/words/{/to/{/match/ a append this' -e 'a and also this' -e 'a oh and this too' -e '};};}' file

おすすめ記事