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



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

774   14  

14 ответов:

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

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

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

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

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

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

сохранить его простым.

grep . filename.txt
$ dos2unix file 
$ grep -v "^$" file

или просто awk

awk 'NF' file

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

tr -d '\r' < "$file" > t ; mv t "$file"
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

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

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

то же, что и выше ответы

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

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

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

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

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

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

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

ваш выход из

match1



match2

до

match1

match2

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

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

grep . filename.txt

старался, но это, кажется, работает (если \r кусает тебя здесь)

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

имя файла шаблона grep.txt / uniq

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

Используя Perl:

perl -ne 'print if /\S/'

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

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

[root@localhost ~]# 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

egrep-v " ^\s\s+"

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

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

это ^ для начала

Comments

    Ничего не найдено.