2014-09-06 47 views
0

我有一個小問題sed。Unix sed XML配置編輯

我想用sed編輯一個基於XML的配置文件。在Putty中,該命令正在工作,但是當我在Bash腳本中使用相同的命令時,什麼都不會發生。

sed -i ./mods/deathmatch/mtaserver.conf -e \ 
    's#<serverip>\([^<][^<]*\)</serverip>#<serverip>'`echo $IP`'</serverip>#' 

任何想法,爲什麼這可能是這種情況?

+0

請勿使用反引號(**'**);使用'$(echo「$ IP」)'或者在整個sed命令周圍使用雙引號,只要'$ IP'就可以工作。 – 2014-09-06 09:25:07

+0

你有出口IP嗎? – linuts 2014-09-06 10:04:03

回答

0

解析XML使用XML處理工具,如xmlstarlet

$ cat config.xml 
<config><server>something</server></config> 
$ xmlstarlet ed -L -O -P -u //server -v new_value config.xml 
$ cat config.xml 
<config><server>new_value</server></config> 
+0

xmlstarlet工作thx,但我必須用sed解決它 – Prophet 2014-09-06 19:02:35

0

不走所有的「大眼夾」上你,但它看起來像你試圖在改變服務器指向你的配置IP不時。

您可能會考慮在/etc/hosts文件中創建本地名稱,並保持靜態配置。

假設你的死鬥服務器IP是10.10.10.1

# in your /etc/hosts: 
10.10.10.1 deathmatch 

然後在你的mtaserver.conf你只需把它引用(你喜歡或任何名稱)deathmatch而不是IP地址。您的機器應該將deathmatch解析爲您的服務器IP地址。

根據您機器上的名稱解析方式,這應該是正常的。如果你看一下​​你應該看到,聲明files之前dns

[email protected]:~$ grep '^hosts' /etc/nsswitch.conf 
hosts:   files dns 

如果你看到這個,你應該確定管理IP在/etc/hosts線。