Моя цель состоит в том, чтобы напечатать содержимое файла до (и исключая) определенного шаблона, и я использую следующее, которое работает как ожидалось (даже когда шаблон равен ^$
):
sed -n '/pattern/!p;//q' file
В моем стремлении сократить указанную выше команду (вы знаете, сохранить несколько байтов) я обнаружил, что могу "инвертировать" отмененную команду печати и вместо этого использовать удаление следующим образом:
sed '/pattern/d;//q' file
который снова работает как положено, за исключением случаев, когда /pattern/
ссылается на пустую строку, как в /^$/
и в этом случае он добавляет пустую строку к выводу, что странно.
Файл, очевидно, содержит пустую строку в моем случае, где я хочу разделить содержимое.
Есть идеи, почему это происходит? Является ли sed
глючит для этого крайнего случая? (дополнительный //q
завершает работу немедленно, чтобы сэкономить время обработки при использовании больших файлов)
sed --version
возвращает sed (GNU sed) 4.5