我仍然試圖學習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