web-dev-qa-db-ja.com

grepを使用してテキストファイルの空行を削除する

FILE

hello

world

foo

bar

このFILEの空の新しい行をすべて削除するときはどうすればよいですか?

コマンドの出力:

FILE

hello
world
foo
bar
71
user191960

grep . FILE


(そして、もしあなたが本当にsedでそれをしたいなら、sed -e /^$/d FILE

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

112
DigitalRoss

以下を試してください:

grep -v -e '^$'
29
Mr.Ree
with awk, just check for number of fields. no need regex

$ more file
hello

world

foo

bar

$ awk 'NF' file
hello
world
foo
bar
11
ghostdog74

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

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

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

Noを持つすべての空白行を削除します。ファイル内の空白(スペースまたはタブ)、つまり(0以上)。

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

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

2

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
clblue2000

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

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
kenorb

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

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

Perl -ne 'print if /./' file

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

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

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

Perl -i.bak -ne 'print if ! /^\s*$/' file
0
Chris Koknat

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
kenorb