【发布时间】:2014-01-08 17:56:27
【问题描述】:
我还在努力学习 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 expression #1, char 17: unterminated `s' command
这适用于以下内容
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
【问题讨论】:
-
我不会重复这个问题。虽然问题是相关的。我相信这里的问题只是替换的
</config>部分中未引用的/。请改用<\/config>。 -
请记住,
sed不是编辑 XML 的好工具。除非您对 XML 所需的换行符做出假设,否则sed代码会变得非常混乱。最好使用提供适当 XML 解析器的语言(Python、Perl 等)。