Вы могли бы сделать это так
sed -ne '/$engineinfo = engine_getinfo();/a\'$'\n''$engineinfo['engine']="asterisk";\'$'\n''$engineinfo['version']="1.6.2.11";'$'\n'';p' /var/lib/asterisk/bin/retrieve_conf
Добавьте -i
для модификации на месте, как только вы подтвердите, что она работает.
Что это делает и как работает?
Сначала мы говорим sed, чтобы он соответствовал строке, содержащей вашу строку. В этой совпадающей строке мы затем выполним команду a
, которая будет «добавить текст».
Синтаксис команды sed a
:
a\
line of text\
another line
;
Обратите внимание, что буквенные символы новой строки являются частью этого синтаксиса. Чтобы сделать все это одной строкой (и сохранить возможность копирования-вставки) вместо буквальных строк новой строки, я использовал $'\n'
, которая скажет bash или zsh вставить настоящую новую строку на месте. Цитирование, необходимое для того, чтобы сделать эту работу, немного сложнее: вы должны выйти из одинарных кавычек, чтобы вы могли интерпретировать $'\n'
с помощью bash, а затем вам необходимо повторно ввести строку с одинарными кавычками, чтобы bash не интерпретировал остальная часть вашего ввода.
РЕДАКТИРОВАТЬ: Обновлено, чтобы добавить обе строки в одну команду добавления.