Bash,Perl或Sed,在找到的短语后插入新行

jmi*_*zas 3 bash perl awk sed

好吧我想我需要做以下事情:

在以下位置搜索以下代码/var/lib/asterisk/bin/retrieve_conf:

$engineinfo = engine_getinfo();
Run Code Online (Sandbox Code Playgroud)

紧接着这两行插入:

$engineinfo['engine']="asterisk";
$engineinfo['version']="1.6.2.11";
Run Code Online (Sandbox Code Playgroud)

提前谢谢,乔

Sor*_*gal 7

你可以这样做

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
Run Code Online (Sandbox Code Playgroud)

-i确认无效后,添加进行修改.

它做什么以及如何工作?

首先,我们告诉sed匹配包含您的字符串的行.在那个匹配的行上,我们将执行一个a命令,即"追加文本".

sed a命令的语法是

a\
line of text\
another line
;
Run Code Online (Sandbox Code Playgroud)

请注意,文字换行符是此语法的一部分.要使它全部一行(并保留复制粘贴能力)代替我使用的文字换行符$'\n',它将告诉bash或zsh插入一个真正的换行符.进行此工作所需的引用有点复杂:您必须退出单引号以便您可以$'\n'通过bash进行解释,然后您必须重新输入单引号字符串以防止bash解释其余的你的意见.

编辑:更新以在一个追加命令中追加两行.