【问题标题】:Unix sed XML config editingUnix sed XML 配置编辑
【发布时间】:2014-09-09 02:08:41
【问题描述】:

我对 sed 有一点问题。

我想用 sed 编辑一个基于 XML 的配置文件。在 Putty 中,该命令正在运行,但是当我在 Bash 脚本中使用相同的命令时,什么也没有发生。

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

任何想法为什么会出现这种情况?

【问题讨论】:

  • 不要使用反引号 (****); use $(echo "$IP")` 或在整个 sed 命令周围使用双引号,而只需 $IP 即可。

标签: linux sed


【解决方案1】:

使用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>

【讨论】:

  • xmlstarlet 工作 thx,但我不得不用 sed 来解决它
【解决方案2】:

不要对你进行所有“Clippy”,但看起来你正试图将你的配置指向一个不时更改 IP 的服务器。

您可以考虑在您的 /etc/hosts 文件中创建一个本地名称,并让您的配置保持静态。

假设你的死亡竞赛服务器 IP 是10.10.10.1

# in your /etc/hosts:
10.10.10.1   deathmatch

然后在您的mtaserver.conf 中,您只需引用deathmatch(或您喜欢的任何名称)而不是IP 地址。您的机器应该将deathmatch 解析为您的服务器IP 地址。

根据您的机器上名称的解析方式,这应该可以正常工作。如果您查看/etc/nsswitch.conf,您应该会看到在dns 之前声明files 的行

vagrant@precise32:~$ grep '^hosts' /etc/nsswitch.conf
hosts:          files dns

如果你看到这个,你应该可以管理/etc/hosts中的IP了。

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 2011-12-17
    • 2020-09-21
    • 2015-09-20
    • 2016-05-15
    • 2012-10-29
    • 2020-12-22
    • 2015-05-21
    相关资源
    最近更新 更多