Sed вставьте пустую строку ниже строки поиска, затем вставьте строку в следующую строку - PullRequest
0 голосов
/ 04 октября 2018

У меня есть выражение sed в функции, которой я передаю параметры.

insert_after_new_line() {
    if ! grep -q "${2}" "${3}"; then
        sed -i "/${1}/{N;N;a ${2}}" "${3}"
    fi
}

insert_after_new_line search insert textfile.txt

Я пытаюсь вставить пустую строку под строкой поиска и вставить строку вставки после.

, поэтому

text
text
search
text

становится

text
text
search

insert
text

но я продолжаю получать сообщение об ошибке

sed: -e выражение # 1, символ 0: не соответствует `{'

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Я проверял это.работает в командной строке

sed -i  '/search/a \\ninsert' file
0 голосов
/ 04 октября 2018

это должно работать:

sed -i '/search/{G;ainsert 
}' file

Вы можете заменить текст переменной оболочки, но также заменить одинарные кавычки на двойные.

0 голосов
/ 04 октября 2018

sed действительно ограничивает команды переводом строки.Существует ;, но он не работает для всех команд, в основном это те команды, которые принимают имя файла в качестве аргумента.; не работает для r R или, например, a.Sed будет читать все после команды a, поэтому sed интерпретирует как a ${2}} как одну команду, в результате он не находит включающий }, потому что он был съеден командой a.Вам нужен перевод строки:

sed -i "/${1}/{N;N;a ${2}
}" "${3}"

или

sed -i "/${1}/{N;N;a ${2}"$'\n'"}" "${3}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...