Удалить пустые строки в текстовом файле с помощью grep


Ответы:


132

grep . FILE


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

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


1
Сладкий! TY и для других команд, но похоже, что grep - мой новый лучший друг.
— user191960

grep. FILE у меня не работает. Вероятно, лучше использовать grep для поиска содержимого файла и sed для редактирования содержимого файла.
— Майкл Диллон,

7
sed -ne/./pтоже работает, и awk /./короче (действие, {print}если не указано). @ ghostdog74: grep '[^[:space:]]'тогда.
— эфементный

5
Для тех, кто не понимает, .это регулярное выражение, которое соответствует любому символу, кроме новой строки.
— Висбаки

3
grep . FILEработает с данным примером, но не обязательно, когда файл может иметь байты, не являющиеся частью кодировки. Например, с GNU grep 2.20 printf "\x80\n" | grep .ничего не выводит.
— vinc17

37

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

grep -v -e '^$'

это имеет тот же эффект, что и grep. ФАЙЛ в этом пробеле в виде пустой строки будет захвачен.
— ghostdog74

1
"grep" ищет любую строку, соответствующую шаблону. "." соответствует любому символу. «grep. FILE» соответствует любой строке, содержащей хотя бы 1 символ. В то время как «grep -v» исключает строки, соответствующие шаблону. OP сказал: «Удалите все пустые новые строки». Если вы хотите исключить строки с пробелами, используйте grep -v '^ $'. " " Будет соответствовать нулю или более предшествующему шаблону, в данном случае пробелу. Хотя вы, возможно, предпочтете сопоставить и исключить другие символы пробела (табуляции, каналы форм и т. Д.).
— Мистер Ри,

3
Этот метод позволил мне объединить несколько исключений проще, чем просто "grep. FILE". Например, я просматривал файл conf и хотел исключить все закомментированные строки и все пустые строки. Поэтому я использовал "grep -v -e '#' -e '^ $' squid.conf". Получилось удовольствие.
— Ben K

2
этот намного быстрее, чем grep. ФАЙЛ'. Это связано с более сложными задачами проверки регулярного выражения '.' чем исключение, если ^ $ не совпадает.
— Эдуард Лопес

2
grep -v -e '^$'всегда работает, чего нет grep .. Например, с GNU grep 2.20 printf "\x80\n" | grep .ничего не выводит, а printf "\x80\n" | grep -v '^$'выводит непустую строку.
— vinc17

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- опять же, как и большинство
— неловких

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, и вас не интересует перечисление количества для каждого быстрого файла, тогда это даст вам ответ. Он удаляет строки без кода и удаляет строки с префиксом комментария.//

Запустите его на корневом уровне вашего проекта 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 ~]#
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.