Linux パターン別ファイルの空行削除(除外)方法
Pocket

Linuxで、ファイルのいらない空行をよく削除するので、削除する空行のパターン別にコマンドをまとめてみることにした。
(まぁ、大体はsed使うだけなんだけど…)

1.すべての空行を削除する

ファイルの、すべての空行を削除する場合、以下のようにsedを実行すればよい。

sed '/^$/d' PATH
[root@BS-PUB-CENT7-01 doc]# cat /tmp/test123

1111
222


3333

33333

[root@BS-PUB-CENT7-01 doc]# sed '/^$/d' /tmp/test123
1111
222
3333
33333

 

その他、以下のようなコマンドでも対処できる。

grep . PATH

 

ただし、このコマンドだとスペースやタブだけの行については削除できない。
それらも含めて削除する場合は、次の項目について確認するとよいだろう。

 

2.空白やタブのみの行も削除する

空白やタブのみの行についても削除する場合は、以下のようにコマンドを実行する。

●awk

awk NF PATH

 

●sed

sed '/^[[:blank:]]*$/d' PATH # タブやスペースのみの行を削除する
sed '/^\s*$/d' PATH # タブやスペースのみの行を削除する
sed -n '/\S/p' PATH # タブやスペース以外の文字列のみを抽出する

 

●grep

grep -v "^\s*$" PATH # タブやスペースのみの行を削除する
grep "\S" PATH # タブやスペース以外の文字列のみを抽出する

 

3.1行目の空行のみ削除する

1行目にある空行のみを削除する場合は、以下のようにsedコマンドを実行するとよいだろう。
もし2行目、3行目というように、対象とする行が決まっているのであれば、最初の数字を書き換えてやればよい。

sed '1{/^$/d}' PATH # タブやスペースのみの行を削除しない
sed '1{/\s*/d}' PATH # タブやスペースのみの行も削除する
[root@BS-PUB-CENT7-01 doc]# cat -A /tmp/test123
$
1111$
222$
$
$
3333$
$
33333$
$
[root@BS-PUB-CENT7-01 doc]# cat -A /tmp/test123_2
^I$
1111$
222$
$
$
3333$
$
33333$
$
[root@BS-PUB-CENT7-01 doc]# sed '1{/^$/d}' /tmp/test123
1111
222


3333

33333

[root@BS-PUB-CENT7-01 doc]# sed '1{/^$/d}' /tmp/test123_2

1111
222


3333

33333

[root@BS-PUB-CENT7-01 doc]# sed '1{/\s*/d}' /tmp/test123
1111
222


3333

33333

[root@BS-PUB-CENT7-01 doc]# sed '1{/\s*/d}' /tmp/test123_2
1111
222


3333

33333
Sponsored Links

4.最初に出現する空行を削除する

空行を削除する行はわからないが、最初に空行となっている行だけを削除する場合、以下のようにsedを実行する。

sed '0,/^$/{//d}' PATH # タブやスペースのみの行を削除しない
sed '0,/^\s*$/{//d}' PATH # タブやスペースのみの行も削除する
[root@BS-PUB-CENT7-01 doc]# cat /tmp/test123_3
1111

222


3333

33333

[root@BS-PUB-CENT7-01 doc]# sed '0,/^$/{//d}' /tmp/test123_3
1111
222


3333

33333

 

5.重複している空行を一行にまとめる

重複している空行を一行にまとめてしまう場合は、catコマンドを使えばよい。

cat -s PATH
[root@BS-PUB-CENT7-01 doc]# cat /tmp/test2.txt
11111

22222


33333




44444
[root@BS-PUB-CENT7-01 doc]# cat -s /tmp/test2.txt
11111

22222

33333

44444

 

6.最終行にある空行を削除する

最終行にある空行のみを削除する場合は、以下のようにsedを実行すればよい。

sed '${/^$/d;}' PATH
[root@BS-PUB-CENT7-01 doc]# cat /tmp/test123

1111
222


3333

33333

[root@BS-PUB-CENT7-01 doc]# sed '${/^$/d;}' /tmp/test123

1111
222


3333

33333

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。