コードジェネレータの出力をクリーンアップしようとしています。残念ながら、複数のインポートが生成されます。
import Foo
...
import Foo
幸いにも、生成されたテキストは頻繁に再生成されますが、比較的静的であるため、簡単に削除する方法があることを願っています。
私は彼らが同じ行にいる場合は、次のことができることがわかりました。sed 's/import Foo//2g'
しかし、私はすべての行を考慮するためにsedについて十分に知りません。
ハッキーソリューションは複数のsedを実行することです。
sed 's/\n/<string I know doesn't appear>/g'
sed 's/import Foo//2g'
sed 's/<string I know doesn't appear>/\n'
しかし、そうするのは間違っているようです。もっと良い方法がありますか?
ベストアンサー1
sed '/^import Foo$/{x;/^$/!d;g;}'
仕組み:パターンに一致するすべての行で
x
:予約済みスペースに行を交換します。/^$/!d
:保存スペースで得たコンテンツが空でない場合です。前の一致がそこに保存されているので、パターンを削除して次の行に進みます。g
:そうでない場合(つまり、最初のパス)、保存された行を再コピーします。デフォルトでは印刷されます。