我仍然试图学习sed所以请原谅我,如果这是一个简单的问题。使用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
可能重复“未终止的“命令”故障排除](http://stackoverflow.com/questions/4070478/sed-error-unterminated-s-command-troubleshooting) – tripleee
我不重复这个问题。虽然问题是相关的。我相信这里的问题仅仅是替代品的''部分中没有引号的'/'。改为尝试'<\/config>'。 –
请记住,'sed'不是编辑XML的好工具。除非您对XML所需的换行符做出假设,否则'sed'代码会变得非常混乱。最好使用提供正确的XML解析器的语言(Python,Perl等)。 – chepner