【发布时间】:2014-02-26 20:28:20
【问题描述】:
我正在尝试使用 bash shell 脚本中的 sed 在配置文件中的特定 xml 元素中插入特定的 xml 配置。在一行上使用 sed 命令时,它可以工作,但当表达式在多行上时,它就不行了。
我正在尝试将 xml 配置插入到几乎位于文件中间的元素中,因此我使用该行来测试 sed 's//\nconfig/gi' file.xml 并且有效,但是我需要添加更多配置,所以生成的 sed 命令是这样的:
sed -i '
/broker/broker\n \
<plugins> \
<jaasAuthenticationPlugin configuration="activemq" /> \
<authorizationPlugin> \
<map> \
<authorizationMap> \
<authorizationEntries> \
<authorizationEntry topic=> read="admins" write="admins" admin="admins" /> \
<authorizationEntry queue=> read="admins" write="admins" admin="admins" /> \
</authorizationEntries> \
</authorizationMap> \
</map> \
</authorizationPlugin>
</plugins>/' $ACTIVEMQ_CONFIG
我最初在 bash 中将其写为 here 文档,但事实证明 sed 命令本身无论如何都需要转义/行继续符,因此它对拥有更漂亮的代码没有多大帮助。
上面的命令给了我错误消息“未终止的地址正则表达式”,我真的看不出原因,因为它基本上是 sed 's/pattern/replace/' 这是语法。如果我将 s/ 添加到 sed 命令的开头,我只会收到一条消息,指出 s 没有正确终止。
我一直在寻找相当长的时间来试图弄清楚如何管理多行 seds 脚本,虽然我只是要编写一个 sed 脚本,但是除了 shell 脚本和 im 之外,我还需要另一个脚本不确定我是否只是为了更改配置而需要它,这似乎有点矫枉过正。
【问题讨论】:
-
</authorizationPlugin>需要\ -
您使用正斜杠作为 sed 分隔符,但替换文本中也有正斜杠。如果您将 sed 斜杠替换为其他内容 - 例如
sed -i 's#broker#broker\n etc#'怎么办?