12 ответов:
у вас может быть пробел/вкладки в "пустой" строке. Если да, то это поможет:
sed '/^\s*$/d'использует
\sчтобы соответствовать любому символу пробела.
sed '/^$/d'должно быть хорошо, вы ожидаете, чтобы изменить файл на месте? Если это так, вы должны использовать-iфлаг.может быть, эти строки не пусты, так что если это так, то взгляните на этот вопрос удалить пустые строки из txtfiles, удалить пробелы из начала и конца строки Я считаю, что то, что вы пытаетесь достичь.
и
awkустранение:awk 'NF' fileчто бы вернуться:
xxxxxx yyyyyy zzzzzzкак это работает? Так как
NFозначает "количество полей", эти пустые строки имеют 0 fiedls, так что awk оценивает 0 в False и ни одна строка не печатается; однако, если есть хотя бы одно поле, оценка истинна и делаетawkвыполнит действие по умолчанию: печать текущей строки.
Я считаю, что это самый простой и быстрый:
cat file.txt | grep .Если вам нужно игнорировать все белые пробельные линии, а затем попробуйте это:
cat file.txt | grep '\S'пример:
s="\ \ a\ b\ \ Below is TAB:\ \ Below is space:\ \ c\ \ "; echo "$s" | grep . | wc -l; echo "$s" | grep '\S' | wc -lвыходы
7 5
С помощью принятого ответа здесь и принятый ответ выше, я использовал:
$ sed 's/^ *//; s/ *$//; /^$/d; /^\s*$/d' file.txt > output.txt `s/^ *//` => left trim `s/ *$//` => right trim `/^$/d` => remove empty line `/^\s*$/d` => delete lines which may contain white spaceЭто охватывает все основания и прекрасно работает для моих нужд. Престижность оригинальных плакатов @Kent и @kev
вы, скорее всего, видите неожиданное поведение, потому что ваш текстовый файл был создан в Windows, поэтому конец последовательности строк
\r\n. Вы можете использовать dos2unix для преобразования его в текстовый файл стиля UNIX перед запуском sed или использоватьsed -r "/^\r?$/d"чтобы удалить пустые строки, независимо от того, есть ли возврат каретки.
мой
bash- конкретный ответ заключается в том, чтобы рекомендовать использоватьperlоператор подстановки с глобальным шаблономgфлаг для этого, как показано ниже:$ perl -pe s'/^\n|^[\ ]*\n//g' $file xxxxxx yyyyyy zzzzzzэтот ответ иллюстрирует учет того, есть ли в пустых строках пробелы (
[\ ]*), а также используя|для разделения нескольких поисковых терминов / полей. Протестировано на macOS High Sierra и CentOS 6/7.FYI, исходный код OP
sed '/^$/d' $fileработает вbashтерминал на macOS High Sierra и CentOS 6/7 Linux в высокопроизводительном суперкомпьютерном кластере.
для меня с FreeBSD 10.1 с sed работало только это решение:
sed -e '/^[ ]*$/d' "testfile"внутри
[]есть пробелы и символы табуляции.тестовый файл содержит:
fffffff next 1 tabline ffffffffffff ffffffff next 1 Space line ffffffffffff ffffffff empty 1 lines ffffffffffff ============ EOF =============
Comments