gpt4 book ai didi

linux - 多行 sed 表达式不起作用

转载 作者:可可西里 更新时间:2023-11-01 11:46:15 25 4
gpt4 key购买 nike

我正在尝试在 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 中将其作为此处文档编写的,但事实证明 sed 命令本身无论如何都需要转义/续行字符,因此它对拥有更漂亮的代码没有多大帮助。

上面的命令给我错误消息“未终止的地址正则表达式”,我真的看不出原因,因为它基本上是 sed 's/pattern/replace/' 这就是语法。如果我将 s/添加到 sed 命令的开头,我只会收到一条消息,指出 s 未正确终止。

我一直在寻找很长一段时间来尝试弄清楚如何管理多行 seds 脚本,虽然我只是想写一个 sed 脚本,但是除了 shell 脚本和 im 之外,我还需要另一个脚本不确定我是否只希望更改配置,这似乎有点矫枉过正。

最佳答案

您最好将您的 XML 片段存储在一个临时文件中,然后将这个简单的 sed 与 r 命令一起使用:

sed -i.bak '/broker/r _temp' file.xml

_temp 是这样的:

cat _temp
<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>

关于linux - 多行 sed 表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22040979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com