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


回答:


26

ただ、grep非空白のための:

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

[:blank:]、文字範囲([...])内では、POSIX文字クラスと呼ばれます。あるようないくつかの[:alpha:][:digit:]... [:blank:](POSIXロケールでは、UTF8ロケールでUnicodeの水平方向の間隔文字をスペースとタブがありますが、他のロケールではすべてのように、より多くのがあるかもしれない)、水平ホワイトスペースにマッチしながら、[[:space:]]試合水平方向と垂直方向の白スペース文字([:blank:]プラス、垂直タブ、フォームフィードなどと同じ)。

grep '[:blank:]'

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


1
$行末も必要ですか?
マイケルデュラント

@MichaelDurrantどちら側にも固定されていません
ヨルダン

1
@MichaelDurrant。[^[:blank:]]$空白以外で終わる行にのみ一致します。私たちは、非空白含む行たいどこでも
ステファンChazelas

@StephaneChazelas私はgrep [:blank:] SOURCEFILEを試しましたが、このコマンドは機能しています。[]はキャラクタークラス用であると理解しています スニペット:blank:は私にとって新しいものです。
ジャムシェッドアンサリユーザー3000272

grep -E '\S'動作しない場合はありますか?
テルドン

21

ここでawk解決策は:

$ awk NF file

awkNF空白行以外にのみ設定します。この条件が一致すると、awkデフォルトのアクションはprint行全体を印刷します。


きちんと、これは空白のある行も削除します。
ウィスバッキー

7

どうですか:

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

または

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

すなわち

各行について、以下を置き換えます。

  • 開始する場合( " ^")
  • スペースまたはタブ( " [[:blank:]]")を0回以上( " *")使用
  • そして、行末です( " $")

:: blank ::およびその他の特殊文字の詳細については、http://www.zytrax.com/tech/web/regex.htm#specialをご覧ください。


4
[[:space:]]タブが含まれます。そうでなければ、タブの後にスペースが続くと正規表現は失敗します。
ヨルダン

マンページが文字クラスが一致するかを記述します。wctype(3)isalpha(3)
ヨルダン

質問に答えていない最初のものを削除することができます。
ステファンシャゼル

@MichaelDurrantは、[[:blank:]]について何か書いていただけますか?
ジャムシェッドアンサリユーザー3000272

[[:blank ::]]の情報を追加しました。ステファン、なぜ最初の作品は動かないのですか?//最後に何もせずに行を置き換えると思いました。
マイケルデュラント

4

sedコマンドを使用して空白行を削除できます。

sed '/^$/d' in > out

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


特に要求されているように、スペースとタブのみを含む行は削除されません。
-dave_thompson_085

3

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

| xargs -L1


1
素敵な短いものですが、それ以上のことを行います。先頭のスペースとタブも削除します。
jringoot

ああ、それはさらに能力があることがわかっていますか?—いいね!;-P
poige

1
そして、行を切り捨てます(デフォルトは1024文字)。マンページを参照してください:linux.die.net/man/1/xargs
jringoot

私はその単純なツールに恋をしている!!! 11)
-poige


0

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

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

こちらもご覧ください:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.