Я пытался grep -v '^$'
в Linux, и это не сработало. Этот файл пришел из файловой системы Windows.
164
Попробуйте следующее:
grep -v -e '^$' foo.txt
-e
Опция позволяет шаблоны регулярных выражений для согласования.
Одиночные кавычки ^$
заставляют его работать на Cshell. Другие оболочки будут счастливы с одинарными или двойными кавычками.
ОБНОВЛЕНИЕ: Это работает для меня с файлом с пустыми строками или «полностью пустым пространством» (например, строки Windows с окончаниями строк в стиле «\ r \ n»), в то время как приведенное выше удаляет только файлы с пустыми строками и окончаниями строк в стиле Unix:
grep -v -e '^[[:space:]]*$' foo.txt
grep -E -v
, все после-e
интерпретируется как шаблон.grep -v -e '^[[:space:]]*$' -e '^#' file
выдаст вам все непустые строки без комментариев в скрипте или файле конфигурации (или любой тип файла, который использует хеш-символ для комментариев).-e
Msgstr " Опция позволяет использовать регулярные выражения для сопоставления." Это очень вводит в заблуждение .-e
является (POSIX-) определением для:This can be used to specify multiple search patterns, or to protect a pattern beginning with a hyphen (-).
(из руководства ). Grep уже ожидает (базовое) регулярное выражение по умолчанию. Для этой модели, вы можете оставить в-e
полностью:grep -v '^[[:space:]]*$' foo.txt
.Будь проще.
источник
Использование:
Или просто просто awk:
Если у вас нет dos2unix, вы можете использовать такие инструменты, как tr :
источник
awk
.Запуск кода
Чтобы лучше понять, как и почему это работает, я рекомендую прочитать регулярные выражения. http://www.regular-expressions.info/tutorial.html
источник
Я предпочитаю использовать
egrep
, хотя в моем тесте с подлинным файлом с пустой строкой ваш подход работал нормально (хотя в моем тесте без кавычек). Это тоже сработало:источник
Если у вас есть последовательности из нескольких пустых строк в строке, и вы хотите, чтобы только одна пустая строка на последовательность, попробуйте
cat -s
подавляет повторяющиеся пустые выходные строки.Ваш вывод будет идти от
в
Три пустые строки в исходном выводе будут сжаты или «сжаты» в одну пустую строку.
источник
источник
Так же, как и предыдущие ответы:
Здесь
grep -e
означает расширенную версию grep . '^ $' означает, что между ^ (начало строки) и $ (конец строки) нет никаких символов. «^» и «$» являются символами регулярных выражений.Таким образом, команда
grep -v
напечатает все строки, которые не соответствуют этому шаблону (между символами ^ и $ нет символов).Таким образом, пустые пустые строки удаляются.
источник
-e
не означает "расширенная версия grep", может быть, вы запутались-E
? В руководстве четко сказано, что-e
просто явно сказано, что шаблон следует. Поскольку шаблон начинается не с тире, и вы все равно определяете только один шаблон, вы можете с тем же успехом опустить его, поскольку по умолчанию grep ожидает один шаблон регулярного выражения:grep -v '^$' foo.txt
(нет необходимости в расширенных функциях регулярного выражения). Также стоит отметить, что это не устраняет пустые строки в файле, а только то, что передается по выводу. Для этого случая,sed -i
будет правильным инструментом.Я очень старался, но, похоже, это работает (при условии,
\r
что кусает вас здесь):источник
Использование Perl:
\S
означает совпадение непустых символов.источник
egrep -v "^ \ s \ s +"
egrep уже выполняет регулярное выражение, а \ s - это пробел.
+ Дублирует текущий шаблон.
^ Для начала
источник
Использование:
источник
uniq
уменьшит соседние пустые строки до одной пустой строки, но не удалит их полностью. Тем не менее, мне нравится пытаться использоватьuniq
таким образом. Сортировка в первую очередь эффективно удалит все пустые строки, оставив только одну, но перестановка порядка строк может оказаться неприемлемой.Вот еще один способ удаления белых линий и линий, начинающихся со
#
знака. Я думаю, что это очень полезно для чтения файлов конфигурации.источник
Это правда, что использование grep -v -e '^ $' может работать, однако оно не удаляет пустые строки, в которых есть 1 или более пробелов . Я нашел самый простой и простой ответ для удаления пустых строк - использование awk . Следующее является измененным немного от парней awk выше:
Но так как этот вопрос касается использования grep, я собираюсь ответить на следующее:
Примечание : пробел между ^ и *.
Или вы можете использовать \ s для представления пустого пространства следующим образом:
источник