Удалить пустые строки в текстовом файле с помощью grep - PullRequest
69 голосов
/ 23 октября 2009

FILE:

hello

world

foo

bar

Как можно, когда удаляются все пустые новые строки в этом FILE?

Вывод команды:

FILE:

hello
world
foo
bar

Ответы [ 8 ]

111 голосов
/ 23 октября 2009

grep . FILE


(И если вы действительно хотите сделать это в sed, тогда: sed -e /^$/d FILE)

(И если вы действительно хотите сделать это в awk, тогда: awk /./ FILE)

29 голосов
/ 23 октября 2009

Попробуйте следующее:

grep -v -e '^$'
10 голосов
/ 23 октября 2009
with awk, just check for number of fields. no need regex

$ more file
hello

world

foo

bar

$ awk 'NF' file
hello
world
foo
bar
5 голосов
/ 11 марта 2016

Вот решение, которое удаляет все строки, которые либо пустые, либо содержат только пробелы:

grep -v '^[[:space:]]*$' foo.txt
2 голосов
/ 20 марта 2014

Попробуйте это: sed -i '/^[ \t]*$/d' file-name

Он удалит все пустые строки, которые не имеют номера. пробелов (пробелов или табуляций), т.е. (0 или более) в файле.

Примечание: внутри квадратной скобки следует пробел, за которым следует \ t.

Модификатор -i заставит записать обновленное содержимое обратно в файл. Без этого флага вы можете видеть, как пустые строки были удалены на экране, но фактический файл не будет затронут.

1 голос
/ 10 марта 2013

grep '^..' my_file

пример

THIS

IS

THE

FILE

EOF_MYFILE

выводит только строки длиной не менее 2 символов.

THIS
IS
THE
FILE
EOF_MYFILE

Смотрите также результаты с grep '^' my_file output

THIS

IS

THE

FILE

EOF_MYFILE

, а также с grep '^.' my_file выходами

THIS
IS
THE
FILE
EOF_MYFILE
0 голосов
/ 10 сентября 2015

Perl может быть излишним, но он работает так же хорошо.

Удаляет все пустые строки:

perl -ne 'print if /./' file

Удаляет все строки, которые являются полностью пустыми или содержат только пробелы:

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

Вариант, который редактирует оригинал и создает файл .bak:

perl -i.bak -ne 'print if ! /^\s*$/' file
0 голосов
/ 05 мая 2015

Попробуйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...