多行sedexpression式不起作用

我试图插入特定的XMLconfiguration内的特定XML元素在configuration文件与Bash shell脚本中的sed。 当在一行上使用sed命令时,它可以工作,但当expression式在多行上时,它不会。

我试图插入xmlconfiguration里面的文件,因此我正在使用该行来testingsed的\\ nconfig / gi'file.xml文件的中间,这是可行的,但我需要添加更多的configuration,所以得到的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的forms写成这个文件的,但事实certificate,sed命令本身也需要转义/续行字符,所以它没有更漂亮的代码。

上面的命令给我的错误消息“未终止的地址正则expression式”,我真的不知道为什么,因为它的基本sed'/ pattern / replace /'这是语法。 如果添加s /到sed命令的开头,我只是得到一个消息,说s没有被正确终止。

我一直在寻找相当一段时间来尝试如何pipe理多行seds脚本,我虽然我只是要写一个sed脚本,但是然后我需要另外一个脚本以及shell脚本,我不知道我会想要只是为了configuration更改,似乎有点矫枉过正。

你最好把你的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> 

正如在评论中提到的那样,作为分隔符的锋线正在走上艰难的道路。 但是一般情况下,你需要在s前面加上前缀(你在问题中这样说,但是在正则表达式中忽略它),否则sed会认为b是一个分支命令,你会得到地址错误。 还需要在每个</反斜杠前加上前缀,并且也很好地避免引号。

这是你的正则表达式的工作,

 sed -i 's/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>/' 

现场看到它