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
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