※自分の備忘のための記事ですがシェアします。
この記事を書いたきっかけ
以下は、入門UNIXシェルプログラミング のP.174からの引用
何も書かれていない行を削除するには次のようにします。
sed -e '/^$/d'
行頭(^)と行末($)の間に何も文字がない行を削除しています。
ただし、この場合スペースやタブだけの行は削除できません。そんなスペースやタブだけの行も含めた空白行を削除したければ、以下のように書きます。sed -e '/^[<space><tab>]*$/d'
上記の記述で、<space>や<tab>は、実際にはスペースキーやタブキーを押すことを意図している。
それで、このスペースやタブだけを0個以上含む行を削除する sed を試そうとしたが、bash ではコマンドラインでタブを入れるとファイル名の補完に捕捉されて入力できない。
解決策
やや苦肉の策ですが、シェル変数にタブを代入して、この変数をsedの編集コマンドに使うことで期待する動作になりました。
以下で、$ はbashのプロンプト、ab.txt の2行目は実際には、スペースとタブを適当に何個か入れてあります。
$ cat ab.txt
aaa
bbb
$ TAB=`echo -n -e '\t'`
$ sed -e "/^[ $TAB]*\$/d" ab.txt
aaa
bbb
$