ファイルからすべての空行を削除したいのですが。行にスペースまたはタブが含まれている場合でも、削除する必要があります。
空白以外の場合はgrep
のみ:
_grep '[^[:blank:]]' < file.in > file.out
_
文字範囲(_[:blank:]
_)内の_[...]
_は、POSIX文字クラスと呼ばれます。 _[:alpha:]
_、_[:digit:]
_...のようなものがあります。_[:blank:]
_は、水平方向の空白に一致します(POSIXロケールでは、スペースとタブですが、他のロケールでは、すべてのような_[[:space:]]
_は、水平方向および垂直方向の空白文字(_[:blank:]
_に加えて、垂直タブ、フォームフィードなど)と一致しますが、UTF8ロケールのUnicode水平間隔文字)。
_grep '[:blank:]'
_
_:
_、b
、l
、a
、n
、またはk
のいずれかの文字を含む行を返します。文字クラスは_[...]
_内でのみ認識され、_^
_内の_[...]
_はセットを否定します。したがって、_[^[:blank:]]
_は、空白以外の任意の文字を意味します。
これがawk
ソリューションです:
$ awk NF file
awk
では、NF
は空白以外の行にのみ設定されます。この条件が一致すると、awk
のデフォルトアクションであるprint
が行全体を出力します。
どうですか:
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 ::およびその他の特殊文字の詳細情報
空白行を削除するには、sed
コマンドを使用できます。
sed '/^$/d' in > out
このコマンドは、「in」ファイルからすべての空行を削除します
私はそれほど速くはないが、ついに面白いものを見つけたようです:
| xargs -L1
試します 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
次のコマンドを使用します。
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
以下も参照してください。
sed
の場合: sedを使用して空の行を削除awk
の場合: awkを使用して空白行を削除