Как удалить пустые / пустые (включая только пробелы) строки в файле в Unix / Linux с помощью командной строки?
содержимое файла file.txt
Line:Text
1:<blank>
2:AAA
3:<blank>
4:BBB
5:<blank>
6:<space><space><space>CCC
7:<space><space>
8:DDD
желаемый выход
1:AAA
2:BBB
3:<space><space><space>CCC
4:DDD
Ответы:
Эта строка sed должна помочь:
Это
-i
означает, что он будет редактировать файл на месте.источник
\s*
это то же решение, которое задается вопросом stackoverflowbad flag in substitute command: 'e'
grep
Простое решение - использование команды
grep
( GNU или BSD ), как показано ниже.Удалить пустые строки (не включая строки с пробелами).
Удалите полностью пустые строки (включая строки с пробелами).
Примечание. Если вы получаете нежелательные цвета, это означает, что вы можете использовать
grep
псевдонимыgrep --color=auto
(проверьтеtype grep
). В этом случае вы можете добавить--color=none
параметр или просто запустить команду как\grep
(которая игнорирует псевдоним).ripgrep
Аналогично с
ripgrep
(подходит для гораздо больших файлов).Удалить пустые строки, не включая строки с пробелами:
или включая строки с пробелами:
Смотрите также:
sed
: Удалить пустые строки с помощью sedawk
: удалить пустые строки с помощью awkисточник
grep .
кажется самым простым решением.grep .
сравнению с другими решениями является то, что он выделит весь текст красным цветом. Другие решения могут сохранить оригинальные цвета. Сравнитеunbuffer apt search foo | grep .
сunbuffer apt search foo | grep -v ^$
grep
вgrep --color=auto
вашей системе есть псевдоним (проверьте :)type grep
. Вы можете запустить его как\grep
или использовать--color=none
параметр.grep --color=none .
, вы получите все белый текст, который переопределяет цветое форматирование оригинальной команды (пример:apt search foo
)grep .
будут совпадать со строками, содержащими только пробелы, которые, как говорит OP, нежелательны.d - это команда sed для удаления строки.
^$
является регулярным выражением, совпадающим только с пустой строкой, начало строки сопровождается концом строки.источник
Вы можете использовать опцию -v с grep, чтобы удалить соответствующие пустые строки.
Нравится
источник
-E
, по крайней мере, с GNU grep, но кроме этого я так рад видеть, что это сделано с grep! Это то, чего я достигаю, предпочитая sed каждый раз; встроенные фильтры кажутся мне лучше, чем встроенные редакторы.grep -Ev '^#|^$' file.txt
Вот
awk
решение:С Awk,
NF
устанавливается только на непустые строки. Когда это условие соответствует, действие Awk по умолчанию состоит в печати всей строки.источник
Чтобы удалить пустые строки, вы можете сжать повторы новой строки с помощью
tr
:источник
XARGS, если вы не возражаете, удаляя ведущие пробелы
источник
Ex / Vim
Вот метод, использующий
ex
редактор (часть Vim):Для нескольких файлов (редактирование на месте):
Примечание:
:bufdo
команда не POSIX .Без изменения файла (просто выведите на стандартный вывод):
источник
Для меня команда @ martigin-heemels выдавала ошибку, это исправляло ее (т.е. фиктивный параметр для i),
sed -i '' '/^$/d' file.txt
источник
Вероятно, самый простой способ удалить пустые строки (без пробелов) - это использовать
cat -s
:По крайней мере, если вы не хотите редактировать файл на месте, а, например, вместо этого писать в терминал. Кроме того, это не связано с каким-либо забавным бизнесом регулярных выражений, поэтому его очень легко запомнить даже для не-дружелюбных людей.
От
man cat
:-s, --squeeze-blank never more than one single blank line
Может отличаться в разных ОС, но присутствовал в нескольких Linux и OpenBSD в прошлый раз, когда я проверял.
источник