grepを介してテキストファイルの空の行を削除します


回答:


129

grep . FILE


(そして、あなたが本当にのsedでそれをしたい場合は:sed -e /^$/d FILE

(そして、あなたが本当にawkの中でそれをしたい場合は:awk /./ FILE


1
甘い!他のコマンドのTYも同様ですが、grepは私の新しい親友のようです。
user191960 2009年

grep。FILEが機能しません。ファイルの内容を検索する場合はgrepを使用し、ファイルの内容を編集する場合はsedを使用することをお勧めします。
マイケルディロン

7
sed -ne/./p動作し、awk /./短くなります(アクションは{print}指定されていない場合です)。@ ghostdog74:grep '[^[:space:]]'それでは。
ephemient 2009年

5
わからない人のために、.は改行以外のすべての文字に一致する正規表現です。
wisbucky 2014年

3
grep . FILE与えられた例で動作しますが、ファイルが文字セットの一部ではないバイトを持つことができる場合は必ずしもそうではありません。たとえば、GNU grep 2.20では、printf "\x80\n" | grep .何も出力しません。
vinc17 2014

37

次のことを試してください。

grep -v -e '^$'

これはgrepと同じ効果があります。空白行としてのスペースが取得されるファイル。
ghostdog74

1
「grep」は、パターンに一致する行を探します。「。」任意の文字に一致します。「grep.FILE」は、1文字以上の任意の行に一致します。一方、「grep -v」は、パターンに一致する行を除外します。OPは「空の新しい行をすべて削除する」と述べました。スペースだけの行を除外する場合は、「grep -v '^ $'」。「」は、前のパターンの0個以上、この場合はスペースに一致します。ただし、他の空白文字(タブ、フォームフィードなど)も一致させて除外することをお勧めします。
Mr.Ree 2009年

3
この方法により、「grep.FILE」よりも簡単に複数の除外を組み合わせることができました。たとえば、confファイルを見ていて、コメントされたすべての行とすべての空の行を除外したいとしました。そこで、「grep -v -e '#' -e '^ $' squid.conf」を使用しました。御馳走を働いた。
ベンK

2
これは 'grepよりもはるかに高速です。ファイル'。これは、正規表現 '。'を検証するというより複雑なタスクが原因です。^ $が一致しなくなったらすぐに除外するよりも。
エドゥアールロペス

2
grep -v -e '^$'常に機能しますが、の場合はそうではありませんgrep .。たとえば、GNU grep 2.20では、printf "\x80\n" | grep .何も出力しませんが、printf "\x80\n" | grep -v '^$'空でない行を出力します。
vinc17 2014

11
with awk, just check for number of fields. no need regex

$ more file
hello

world

foo

bar

$ awk 'NF' file
hello
world
foo
bar

引用符は必要ありません。このトリックはにありますawk1line.txt-そしてまた、ほとんどのawkトリックもそうです:)
ephemient 2009年

2
シェルから実行しているので、引用符を付けるのは私の良い習慣です。複合awkステートメントの場合は、引用符を付ける必要があります。だから、この習慣を身につけてみませんか。
ghostdog74

これがどのように動作するかの説明:stackoverflow.com/questions/23544804/...
wisbucky

9

空白またはスペース文字のみを含むすべての行を削除するソリューションは次のとおりです。

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

2

これを試して: sed -i '/^[ \t]*$/d' file-name

番号のない空白行はすべて削除されます。ファイル内の空白(スペースまたはタブ)、つまり(0以上)。

注:角括弧内には「スペース」の後に「\ t」が続きます。

修飾子-iは、更新されたコンテンツをファイルに強制的に書き戻します。このフラグがないと、画面上で空の行が削除されたことがわかりますが、実際のファイルは影響を受けません。


1

grep '^..' my_file

THIS

IS

THE

FILE

EOF_MYFILE

2文字以上の行のみを出力として提供します。

THIS
IS
THE
FILE
EOF_MYFILE

grep '^' my_file出力のある結果も参照してください

THIS

IS

THE

FILE

EOF_MYFILE

また、grep '^.' my_file出力付き

THIS
IS
THE
FILE
EOF_MYFILE

1

空の行を削除することがスペースを含む行を意味する場合は、次を使用します。

grep '\S' FILE

例えば:

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

line2

line3

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

line3

line4

参照:


0

ex -wayを試してください:

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

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

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

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

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

0

Perlはやり過ぎかもしれませんが、同様に機能します。

完全に空白のすべての行を削除します。

perl -ne 'print if /./' file

完全に空白であるか、空白のみを含むすべての行を削除します。

perl -ne 'print if ! /^\s*$/' file

オリジナルを編集して.bakファイルを作成するバリエーション:

perl -i.bak -ne 'print if ! /^\s*$/' file

0

Xcodeプロジェクトのコードの合計行数を知りたいが、各Swiftファイルの数をリストすることに興味がない場合は、これで答えが得られます。コードがまったくない行を削除し、コメントが前に付いている行を削除します//

Xcodeプロジェクトのルートレベルで実行します。

find . \( -iname \*.swift \) -exec grep -v '^[[:space:]]*$' \+ | grep -v -e '//' | wc -l

コード内に次のように始まり/*、次の*/ように終わるコメントブロックがある場合:

/*
 This is an comment block 
*/

その後、これらはカウントに含まれます。(あまりにもハード)。


0

最も簡単な答え-----------------------------------------

[root@node1 ~]# cat /etc/sudoers | grep -v -e ^# -e ^$
Defaults   !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
[root@node1 ~]#
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.