当一行与模式匹配时,我可以在sed中执行两个命令吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当一行与模式匹配时,我可以在sed中执行两个命令吗?相关的知识,希望对你有一定的参考价值。
我有一个工作sed命令搜索rm a-file
,评论它并在它下面添加另一行(rm another-file
):
sed -e '/^rm a-file/s;^;# ;' \
-e '/# rm a-file/a rm another file' \
my.script
我想知道是否有可能将编辑,注释和附加组合成一个命令,以便我必须只指定匹配模式(/^rm a-file/
)一次。
如果重要,我正在使用gnu sed。
答案
您可以像这样重新组合它:
ON命令:
$ cat commands.sed
/^rm a-file/{
s@^@# @
a rm another file
}
INPUT:
$ cat myscript.sh
rm a-file
blabla
rm a-file
blabla2
OUTPUT:
$ sed -f commands.sed myscript.sh
# rm a-file
rm another file
blabla
# rm a-file
rm another file
blabla2
说明:
这将查找以rm a-file
开头然后用^
替换#
的行(注释初始rm命令)然后只有当行遵守条件rm another file
时才会追加行^rm a-file
。
正如Sundeep所建议的那样,这也可以在单行中完成:(https://www.gnu.org/software/sed/manual/sed.html#Commands-Requiring-a-newline)
sed -e '/^rm a-file/{s@^@# @; a rm another file' -e '}'
另一答案
使用GNU sed
,这个特殊情况也可以用简单的替换来覆盖
$ sed 's/^rm a-file.*/# &\nrm another file/' my.script
# rm a-file
rm another file
blabla
# rm a-file
rm another file
blabla2
^rm a-file.*
匹配从rm a-file
开始的线,然后.*
捕获其余的线重复使用# &\nrm another file
这里的&
将有完整匹配的文本,而\n
将添加所需的换行
以上是关于当一行与模式匹配时,我可以在sed中执行两个命令吗?的主要内容,如果未能解决你的问题,请参考以下文章