web-dev-qa-db-ja.com

ファイルから空白行を削除する方法(タブとスペースを含む)?

ファイルからすべての空行を削除したいのですが。行にスペースまたはタブが含まれている場合でも、削除する必要があります。

空白以外の場合はgrepのみ:

_grep '[^[:blank:]]' < file.in > file.out
_

文字範囲(_[:blank:]_)内の_[...]_は、POSIX文字クラスと呼ばれます。 _[:alpha:]_、_[:digit:]_...のようなものがあります。_[:blank:]_は、水平方向の空白に一致します(POSIXロケールでは、スペースとタブですが、他のロケールでは、すべてのような_[[:space:]]_は、水平方向および垂直方向の空白文字(_[:blank:]_に加えて、垂直タブ、フォームフィードなど)と一致しますが、UTF8ロケールのUnicode水平間隔文字)。

_grep '[:blank:]'
_

_:_、blan、またはkのいずれかの文字を含む行を返します。文字クラスは_[...]_内でのみ認識され、_^_内の_[...]_はセットを否定します。したがって、_[^[:blank:]]_は、空白以外の任意の文字を意味します。

26

これがawkソリューションです:

$ awk NF file

awkでは、NFは空白以外の行にのみ設定されます。この条件が一致すると、awkのデフォルトアクションであるprintが行全体を出力します。

22
cuonglm

どうですか:

sed -e 's/^[[:blank:]]*$//' source_file > newfile

または

sed -e '/^[[:blank:]]*$/d' source_file > newfile

つまり.

各行を次のように置き換えます。

  • 開始した場合( "^ ")
  • スペースまたはタブ( "[[:blank:]] ")ゼロ回以上(" * ")
  • そして、行の終わりです( "$ ")

http://www.zytrax.com/tech/web/regex.htm#special の:: blank ::およびその他の特殊文字の詳細情報

7
Michael Durrant

空白行を削除するには、sedコマンドを使用できます。

sed '/^$/d' in > out

このコマンドは、「in」ファイルからすべての空行を削除します

4
Raghavendra

私はそれほど速くはないが、ついに面白いものを見つけたようです:

| xargs -L1

3
poige

試します ex -way:

ex -s +'v/\S/d' -cwq test.txt

複数のファイルの場合(インプレース編集):

ex -s +'bufdo!v/\S/d' -cxa *.txt

注::bufdoコマンドは [〜#〜] posix [〜#〜] ではありません。

ファイルを変更せずに(標準出力に出力するだけ):

cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
0
kenorb

次のコマンドを使用します。

grep '\S' FILE

スペースやタブを含むすべての行を削除します。

それ以外の場合は、スペース/タブを含む行を含まない削除、次を使用:

grep . FILE

例えば:

$  printf "line1\n\nline2\n \nline3\n" > FILE
$  cat -v FILE
line1

line2

line3
$  grep '\S' FILE
line1
line2
line3
$  grep . FILE
line1
line2

line3

以下も参照してください。

0
kenorb