ファイル内の特定の文字を含む行を削除する

$ ls | grep test test1.txt test1.txte

特定の文字を含む行を削除して別名で出力する

ファイル内で特定の文字列を含む行を削除するには「sed」コマンドで削除できます。

下記のように、北海道、東北、関東の都道府県のファイルがあった場合「Tohoku」を削除したい場合は、「sed -e '/Kanto/d’ test.txt > aaa.txt」のようにすれば、「Tohoku」を覗いた行のファイルが保存されます

書式:sed -e /’削除対象の文字列’/d (ファイル名) > (出力ファイル名)

$ cat test.txt
Hokkaido Hokkaido Sapporo
Tohoku Aomori Aomori
Tohoku Iwate Morioka
Tohoku Miyagi Sendai
Tohoku Akita Akita
Tohoku Yamagata Yamagata
Tohoku Fukushima Fukushima
KantoKanto Ibaraki Mito
Kanto Tochigi Utsunomiya
Kanto Gumma Maebashi
Kanto Saitama Saitama
Kanto Chiba Chiba
Kanto Tokyo Shinjuku
Kanto Kanagawa Yokohama
MBP-2014Mid:Downloads masahiro

# 「Kanto」を含む行を削除して「aaa.txt」を出力する
$ sed -e '/Kanto/d' test.txt > aaa.txt

# 「Kanto」を含まれていないか確認
$ cat aaa.txt
Hokkaido Hokkaido Sapporo
Tohoku Aomori Aomori
Tohoku Iwate Morioka
Tohoku Miyagi Sendai
Tohoku Akita Akita
Tohoku Yamagata Yamagata
Tohoku Fukushima Fukushima

特定の文字を含む行を削除して、同一ファイルに上書きしたい

特定の文字を含む行を削除して、同一ファイルに上書き(置き換え)したい場合は、「sed」コマンドで「-i」 のオプションを使用します。

書式:sed -i -e /’削除対象の文字列’/d (ファイル名) > (出力ファイル名)

 # 「Tohoku」を含む行を削除して、「test.txt」を上書きをする
$ sed -i -e '/Tohoku/d' test.txt

# 「Tohoku」を含まれていないか確認
$ cat test.txt
Hokkaido Hokkaido Sapporo
KantoKanto Ibaraki Mito
Kanto Tochigi Utsunomiya
Kanto Gumma Maebashi
Kanto Saitama Saitama
Kanto Chiba Chiba
Kanto Tokyo Shinjuku
Kanto Kanagawa Yokohama

他のコマンドのオプションのように「-ie」と繋げて使いたいですが、この場合だと夜腕バックアップが作成されますので、オプションはわけて「-i」「-e」とした方がいいです。

「-i -e」と分けてオプションを使用した場合CentOS,Ubuntuでは、バックアップファイルは作成されませんでしたが、macOSだと「-i -e」としてもバックアップファイルが生成されました。macOSだと仕様が違うのかも知れません

# [-ie]とまとめてオプションをつけるとバックアップファイルが生成されます
$ sed -ie '/Tohoku/d' test1.txt
$ ls | grep test
test1.txt
test1.txte

# [-i -e]と別々にオプションをつけるとバックアップファイルが生成されません
$ sed -i -e '/Hokkaido/d' test1.txt
$ ls | grep test
test1.txt
test1.txte

 

スポンサーリンク