それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

sed 文字列が含まれる行を削除する

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

f:id:takuya_1st:20190515173803p:plain

使用例: 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

awkperl / ruby などでもできるが。

sed が一番手っ取り早いし、sed で置換と行削除を覚えておくと捗りそうですよね。

てか、ゴミデータが混じったときに行ごと削除するのは、めっちゃ使うんで丸暗記してもいいくらい

参考資料

https://qiita.com/takech9203/items/b96eff5773ce9d9cc9b3