appendstring
sedを使用してandを含む行の後に追加しようとしています。Hello
World
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-contain-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