web-dev-qa-db-ja.com

grepで空白行を削除する

Linuxでgrep -v '^$'を試しましたが、うまくいきませんでした。このファイルはWindowsファイルシステムから取得されました。

132
node ninja

以下を試してください:

grep -v -e '^$' foo.txt

-eオプションを使用すると、照合用の正規表現パターンが許可されます。

^$を単一引用符で囲むと、Cshellで機能します。他のシェルは、一重引用符または二重引用符で満足します。

更新:これは、空白行または「すべての空白」(「\ r\n」スタイルの行末を持つWindows行など)のファイルに対して機能しますが、上記は空白行とUNIXスタイルの行末を持つファイルのみを削除します。

grep -v -e '^[[:space:]]*$' foo.txt
249
ars

複雑にしないでおく。

grep . filename.txt
47
Frej Connolly
$ dos2unix file 
$ grep -v "^$" file

または単にawk

awk 'NF' file

Dos2unixがない場合は、trのようなツールを使用できます

tr -d '\r' < "$file" > t ; mv t "$file"
26
ghostdog74
grep -v "^[[:space:]]*$"

The -v makes it print lines that do not completely match

===Each part explained===
^             match start of line
[[:space:]]   match whitespace- spaces, tabs, carriage returns, etc.
*             previous match (whitespace) may exist from 0 to infinite times
$             match end of line

コードの実行

$ echo "
> hello
>       
> ok" |
> grep -v "^[[:space:]]*$"
hello
ok

これがどのように/なぜ機能するかについてさらに理解するために、正規表現を読むことをお勧めします。 http://www.regular-expressions.info/tutorial.html

12
Sepero

この例で空白行を削除できます:

grep . filename.txt
3
tts

行に複数の空白行のシーケンスがあり、シーケンスごとに1つの空白行のみが必要な場合は、試してください

grep -v "unwantedThing" foo.txt | cat -s

cat -sは、空の出力行の繰り返しを抑制します。

あなたの出力は

match1



match2

match1

match2

元の出力の3つの空白行は、1つの空白行に圧縮または「圧縮」されます。

2
Senol Erdogan

egrepを使用することをお勧めしますが、空白行を含む本物のファイルを使用したテストでは、アプローチは正常に機能しました(ただし、テストでは引用符はありません)。これも機能しました:

egrep -v "^(\r?\n)?$" filename.txt
2
chryss

上記の回答と同じ

grep -v -e '^$' foo.txt

ここで、grep -eはgrepの拡張バージョンを意味します。 '^ $'は、^(行の始まり)と$(行の終わり)の間に文字がないことを意味します。 「^」および「$」は正規表現文字です。

したがって、コマンドgrep -vは、このパターンに一致しないすべての行を出力します(^と$の間に文字はありません)。

これにより、空の空白行が削除されます

2
FatherMathew

一生懸命試してみましたが、これはうまくいくようです(\rがここで噛んでいると仮定します)

printf "\r" | egrep -xv "[[:space:]]*"
1
mvds

白い線と#記号で始まる行を削除する別の方法を次に示します。これは設定ファイルを読むのにとても便利だと思います。

[root@localhost ~]# cat /etc/sudoers | egrep -v '^(#|$)'
Defaults    requiretty
Defaults   !visiblepw
Defaults    always_set_home
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
LS_COLORS"
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
stack ALL=(ALL) NOPASSWD: ALL
0
lauc.exon.nod

Perlの使用:

Perl -ne 'print if /\S/'

\Sは、空白以外の文字に一致することを意味します。

0
Majid Azimi

grepパターンfilename.txt |ユニック

0
baitisj

egrep -v "^\s\s +"

egrepはすでに正規表現を実行し、\ sは空白です。

+は現在のパターンを複製します。

^は開始のためのものです

0
Jonni2016aa
awk 'NF' file-with-blank-lines > file-with-no-blank-lines
0
Tim