Использование sed для добавления пустой строки в EOF

#sed #escaping #line-breaks

#sed #экранирование #разрывы строк

Вопрос:

Эта команда sed добавляет 2 строки к abc.txt

sed '$ aline3nline4' abc.txt

 line 1
line 2
line 3
line 4
 

но хотел добавить пустую строку, прежде чем добавлять 2 строки, подобные этой

 line 1
line 2

line 3
line 4
 

итак, попробовал

sed '$ anline3nline4' abc.txt

вместо этого получил

 line 1
line 2
nline 3
line 4
 

Пожалуйста, посоветуйте

Ответ №1:

Вам нужен другой :

 printf 'line1nline2' | sed '$ a\nline3nline4'
 

который работает на GNU sed 4.8.

Вы смотрите man sed и ищете Append в нем, первый результат гласит

        a 

       text   Append text, which has each embedded newline preceded by a backslash.
 

Слабость вашего случая заключается в том факте, что вы пишете text в той же строке, что и команда a , что разрешено в GNU sed, но не в POSIX sed, поэтому начало интерпретируется как обратная косая черта, которая потребовалась бы после a в многострочном скрипте.

В вашем коде будет ошибка с POSIX sed, потому что там требуется, чтобы значение text должно быть в следующей строке, а разрыв строки, который вы должны поставить перед text ним, должен быть экранирован . (Ссылка: O’Reilly’s sed amp; awk by Дейл Догерти и Арнольд Роббинс.)

Ответ №2:

Спасибо @Enlico. Мы могли бы сделать это с tee очень легко без использования регулярных выражений.

sed '$ a\nline3nline4' abc.txt

Решена проблема

строка 1
строка 2

строка 3
строка 4