我正在调试别人编写的 LINUX 脚本。在脚本中我们有一行代码如下
sed -i "\#</resources>#{h;s#.*#cat /opt/abc/new.xml#e;G}" /opt/abc/tempmodule.xml
它似乎在进行一些模式匹配和替换,然后将内容从 new.xml 复制到 tempmodule.xml。但是 sed 中使用的那些选项的含义是什么?这能解释一下吗。
到目前为止我的理解是
它试图</resources>
在 tempmodule.xml 中查找文本“”并将内容替换为 new.xml
我不知道#
这行是什么意思。但是当我查看 sed 手册时,它说注释行..但我不认为这里的意思不同。
剧本
也可以这样写,这样可以加注释:
该文件
/opt/abc/tempmodule.xml
是输入文件。该选项-i
定义输出应转到输入文件并“就地”替换它——最后输入文件包含新内容。输入文件逐行读取到 sed 的缓冲区。无论是否被更改,在命令结束时缓冲区将被发送到输出并且通过将新行读取到缓冲区来重新开始循环。
该脚本通过在(每一)行之前
/opt/abc/tempmodule.xml
插入内容来更改文件,因此将项目附加到 xml 对象“资源”的末尾。/opt/abc/new.xml
</resources>
您可以在非常完整且易读的 GNU sed手册页中找到答案,尤其是
s
命令,它说:进一步我们有: