Почему sed / ^ $ / d удаляет только пустые строки, а / ^ $ / p выводит все строки? - PullRequest
5 голосов
/ 11 ноября 2011

Я могу использовать sed /^$/d <file>, чтобы удалить все пустые строки в файле, но что, если я хочу напечатать только пустые строки?Команда sed /^$/p <file> печатает все строки в файле.

Причина, по которой я хочу это сделать, заключается в том, что мы используем программу EDA (Expedition), которая использует регулярные выражения для запуска правил для имен сетей.Я пытаюсь найти способ поиска всех сетей, которым не присвоены имена.Я думал, что использование ^$ будет работать, но это просто приводит к поиску всех сетей, что тоже делает /^$/p.Так есть ли другой способ сделать это?

Ответы [ 4 ]

18 голосов
/ 11 ноября 2011

Если не указано иное sed будет печатать пространство шаблона, когда оно завершит его обработку. Если вы внимательно посмотрите на свой вывод, вы заметите, что вы получаете 2 пустых строки для каждой в файле. Вам нужно будет использовать ключ командной строки -n, чтобы остановить печать sed.

sed -n /^$/p infile

Должен работать как хочешь.

2 голосов
/ 11 ноября 2011

Sed печатает каждую строку по умолчанию, поэтому флаг p бесполезен.Чтобы сделать это полезным, вам нужно дать sed ключ -n.Действительно, кажется, что следующее делает то, что вы хотите:

sed -n /^$/p
1 голос
/ 11 ноября 2011

думай иначе, не p , а ! D

Вы можете попробовать:

sed '/^$/!d' yourFile
1 голос
/ 11 ноября 2011

Вы также можете использовать grep как:

grep '^$' infile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...