Sed удаляет пустые строки после определенного номера строки

Сawk:

awk '{a[NR%4] = a[NR%4] (NR<=4 ? "" : ",") $0}
     END{for (i = 1; i <= 4; i++) print a[i%4]}' < input.txt
-1
22.02.2021, 23:08
1 ответ

попробуй:

sed '4,$ {/^$/d}' infile

начать с 4-й строки до конца файла, удалить пустые строки.

Проблема с вашей командой заключается в том, что вы снова заменяете пустую строку пустой строкой в ​​s~^$~~g(, которая совпадает с s~^$~~), и вы ее не удаляете.

Обратите внимание, :также, поскольку вы используете другой разделитель, отличный от косой черты по умолчанию /, для использования этого стиля ~^$~dвам нужно экранировать первый ~, чтобы сообщить sed, что он не является частью вашего регулярного выражения:

sed -e '4,${ \~^$~d }' infile

см.man sedв разделе «Адреса» об этом:

\cregexpc Match lines matching the regular expression regexp. The c may be any character.


Если вы хотите удалить пустые строки, а также строки, содержащие только пробелы (Табуляции/Пробелы ), вы можете сделать:

sed '4,${ /^[[:blank:]]*$/d }' infile
8
18.03.2021, 22:29

Теги

Похожие вопросы