我还在尝试学习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
答案 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'
,它关闭了定义脚本的第一个单引号。尝试从脚本中删除单引号。