Можно ли использовать команду sed для замены нескольких пустых строк одной пустой строкой? - PullRequest
24 голосов
/ 23 декабря 2010

Я знаю, что в SO * есть аналогичный вопрос Как я могу заменить несколько пустых строк одной пустой строкой в ​​bash? .Но мой вопрос заключается в том, можно ли это реализовать с помощью команды sed?

Спасибо

Ответы [ 2 ]

44 голосов
/ 23 декабря 2010

Попробуйте:

sed '/^$/N;/^\n$/D' inputfile
1 голос
/ 23 декабря 2010

Это можно сделать, удалив сначала пустые строки и добавив пробел с помощью команды G :

sed '/^$/d;G' text.txt

Edit2: theКоманда выше добавит пустые строки между каждым абзацем, если это не нужно, вы можете сделать:

sed -n '1{/^$/p};{/./,/^$/p}'

Или, если вы не возражаете, что все ведущие пустые строки будут удалены, это может быть записанокак:

sed -n '/./,/^$/p'

, поскольку первое выражение просто оценивает первую строку и печатает ее, если она пуста.

Здесь: -n опция подавляет автоматическую печать пробела, /. /, / ^ $ / определяет диапазон между хотя бы одним символом и ни одним символом (т. е. пустое пространство между символами новой строки) и p указывает напечатать этот диапазон.

...