これは、スペースとタブだけの行を「空」と見なす、適応された sed バージョンです。
sed -e :a -e '/[^[:blank:]]/,$!d; /^[[:space:]]*$/{ $d; N; ba' -e '}'
これは基本的に受け入れられた回答バージョンです(BryanHコメントを考慮)が.、最初のコマンドのドットは[^[:blank:]](空白ではないもの)\nに変更され、2番目のコマンドアドレス内は[[:space:]]改行、スペース、タブを許可するように変更されました.
POSIX クラスを使用しない代替バージョンですが、sed は insert\tと\ninsideをサポートする必要があります[…]。GNU sed にはありますが、BSD sed にはありません。
sed -e :a -e '/[^\t ]/,$!d; /^[\n\t ]*$/{ $d; N; ba' -e '}'
テスト:
prompt$ printf '\n \t \n\nfoo\n\nfoo\n\n \t \n\n'
foo
foo
prompt$ printf '\n \t \n\nfoo\n\nfoo\n\n \t \n\n' | sed -n l
$
\t $
$
foo$
$
foo$
$
\t $
$
prompt$ printf '\n \t \n\nfoo\n\nfoo\n\n \t \n\n' | sed -e :a -e '/[^[:blank:]]/,$!d; /^[[:space:]]*$/{ $d; N; ba' -e '}'
foo
foo
prompt$