使用sed我无法得到以下工作

时间:2014-01-07 17:35:29

标签: linux bash sed awk grep

我还在尝试学习sed,如果这是一个简单的问题,请原谅我。

我有一个xml文件,如下所示

<configs>
<config name="{subdomain}" protocol="rdp">
    <param name="hostname" value="{windows IP}" />
    <param name="port" value="3389" />
    <param name="username" value="{windows user to log in as}" />
    <param name="password" value="{windows password}" />
</config>
</configs>

我正在尝试对配置部分进行添加和删除。对于追加我有以下

sed 's/.*[/]configs.*/<config name=\"'$SUBDOMAIN'\" protocol=\"'$TYPE'\">\n<param name="hostname" value=\"$HOSTNAME\">\n<param name="port" value=\"'$PORT'\" >\n<param name="username" value="" >\n<param name="password" value="{windows password}" >\n</config>\n&/'

直到我添加了'</config>'行才开始工作。之后它声明's'语句没有关闭,任何人都可以帮我解决这个问题吗?

编辑 - 我尝试使用正斜杠<\/config>使用以下建议之一,但我仍然遇到同样的问题。

sed 's/.*[/]configs.*/
<config name=\"'$SUBDOMAIN'\" protocol=\"'$TYPE'\">\n
<param name="hostname" value=\"$HOSTNAME\">\n
<param name="port" value=\"'$PORT'\" >\n
<param name="username" value="" >\n
<param name="password" value="{windows password}" >\n
<\/config>/n&/' guacd/noauth-config.xml

sed:-e表达式#1,字符17:未终止的's'命令

这适用于以下

sed 's|.*[/]configs.*|<config name=\"'$SUBDOMAIN'\" protocol=\"'$TYPE'\">\n<param name="hostname" value=\"$HOSTNAME\">\n<param name="port" value=\"'$PORT'\" >\n<param name="username" value="" >\n<param name="password" value="{windows password}" >\n</config>\n&|' guacd/noauth-config.xml

2 个答案:

答案 0 :(得分:1)

/中的</config>关闭了您的sed。看看这个简化的例子:

$ date | sed -e 's/./</config>/'
sed: 1: "s/./</config>/\n": bad flag in substitute command: 'c'

不起作用。 sed认为第二个/(在</config>中)是命令的结尾,尝试将以下config视为标记(如gi s///gi 1}}),但是没有c标志,所以它会窒息。

您可以像这样逃避/

$ date | sed -e 's/./<\/config>/'
</config>ue Jan  7 19:59:19 CET 2014

或使用不同的分隔符代替/,如下所示:

$ date | sed -e 's|.|</config>|'
</config>ue Jan  7 20:01:30 CET 2014

答案 1 :(得分:0)

你的模式中有'$SUBDOMAIN',它关闭了定义脚本的第一个单引号。尝试从脚本中删除单引号。