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

Я пробовал grep -v '^$' в Linux, и это не сработало. Этот файл поступает из файловой системы Windows.

Ответ 1

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

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

Параметр -e позволяет шаблонам регулярных выражений для сопоставления.

Одиночные кавычки вокруг ^$ заставляют его работать для Cshell. Другие оболочки будут довольны либо одиночными, либо двойными кавычками.

UPDATE: это работает для меня с файлом с пустыми строками или "всем белым пространством" (например, с линиями строк с окончанием строки стиля "\ r\n" ), тогда как выше всего удаляются файлы с пустыми строками и стилем unix окончания строки:

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

Ответ 2

Держите его простым.

grep . filename.txt

Ответ 3

$ dos2unix file 
$ grep -v "^$" file

Или просто просто awk

awk 'NF' file

Если у вас нет dos2unix, вы можете использовать такие инструменты, как tr

tr -d '\r' < "$file" > t ; mv t "$file"

Ответ 4

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

Ответ 5

Вы можете удалить пустую строку с помощью этого примера:

grep . filename.txt

Ответ 6

Я предпочитаю использовать egrep, хотя в моем тесте с подлинным файлом с пустой строкой ваш подход работал нормально (хотя без кавычек в моем тесте). Это тоже сработало:

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

Ответ 7

Пробовал трудно, но это, похоже, работает (предполагая, что \r кусает вас здесь)

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

Ответ 8

Аналогично приведенным выше ответам

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

Здесь grep -e означает расширенную версию grep. '^ $' означает отсутствие символа между ^ (начало строки) и $(конец строки). '^' и '$' являются регулярными символами.

Таким образом, команда grep -v будет печатать все строки, которые не соответствуют этому шаблону (без символов между ^ и $).

Таким образом удаляются пустые пустые строки

Ответ 9

Если у вас есть последовательности из нескольких пустых строк в строке и требуется только одна пустая строка для каждой последовательности, попробуйте

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

cat -s подавляет повторяющиеся пустые выходные строки.

Ваш результат будет идти от

match1



match2

к

match1

match2

Три пустые строки в исходном выходе будут сжаты или "сжаты" в одну пустую строку.

Ответ 10

grep pattern filename.txt | Uniq

Ответ 11

awk 'NF' file-with-blank-lines > file-with-no-blank-lines

Ответ 12

Использование Perl:

perl -ne 'print if /\S/'

\S означает совпадение непустых символов.

Ответ 13

вот еще один способ удаления белых линий и строк, начинающихся с знака #. Я думаю, что это очень полезно для чтения конфигурационных файлов.

[[email protected] ~]# 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

Ответ 14

egrep -v "^\s\s +"

egrep уже выполняет регулярное выражение, а \s - пробел.

+ дублирует текущий шаблон.

The ^ для начала