sedスクリプトはパターンを含むすべての行を削除し、最後に行を追加します。

sedスクリプトはパターンを含むすべての行を削除し、最後に行を追加します。

fooファイルがまたはを含む複数行に複雑になりましたbar。すべて削除して最後に1行追加します。

だから与えられたファイル

some stuff
foo1
foo2
bar=42
some other stuff
bar
foo
more stuff

sedスクリプトを返す必要があります。

some stuff
some other stuff
more stuff
foo
bar

sedを試してみましたが、最後の行に両方が'/foo/d;/bar/d;$s/$/\nfoo\nbar/'含まれておらず、ファイルが空でない限り機能します。foobar

foo最後の行でも機能させるにはどうすればよいですか?スクリプト全体がこれ以上の作業を行う必要があるので、私はsedを使い続けたいと思います。もちろん、スクリプトの後にechoを含む行を追加することもできますが、オールインワンソリューションがないかどうか疑問に思います。

編集する:空のファイルボックスは処理する必要はありません。

ベストアンサー1

2番目の条件を追加する必要があります。最後の行でない場合にのみ削除し、a一致後に行を削除するには、置換の代わりに最後の行に保留を使用します。

sed -E '/foo|bar/{$!d
}
${a\
foo\
bar
//d
}' infile

おすすめ記事