sed で、文字列を探し、文字列が見つかった行を消す。
sed -e '/search/d'
検索語 search を含む行を削除。 これで指定文字列を探してその行を除去することができる。
行をまるごと消すのに、改行コードは必要ない。
ありがちなミス。
sed 's/search\n//' ## これはうまくいかない
改行コードを送るはめんどくさい。なぜなら、sedは1行ずつ処理することが前提だからだ。
コマンドの動作サンプル
3行のテキストサンプルを作ります。
for e in aaa bbb ccc ; do echo $e ;done | nl 1 aaa 2 bbb 3 ccc
ここから bbb にマッチする行を消してみます。
for e in aaa bbb ccc ; do echo $e ;done | nl | sed -e '/bbb/d' 1 aaa 3 ccc
使用例: sudo reboot を削除する。
コマンドの履歴から。sudo reboot を探してコマンド履歴をきれいにする。 reboot が履歴検索で暴発したらめんどくさいので。
cat .bash_history | sed -e '/^sudo reboot/d'
ちゃんと消えているか確認。
cat .bash_history | sed -e '/sudo reboot/d' | grep 'sudo reboot' | wc -l 0
awk や perl / ruby などでもできるが。
sed が一番手っ取り早いし、sed で置換と行削除を覚えておくと捗りそうですよね。
てか、ゴミデータが混じったときに行ごと削除するのは、めっちゃ使うんで丸暗記してもいいくらい