【发布时间】:2020-04-21 02:37:39
【问题描述】:
我正在尝试编写一种从 Nagios Core 中的主机组文件中删除主机的方法。 主机组文件格式为:
server1,server2,server3,server4
删除服务器时,我不仅需要删除服务器,还需要删除服务器后面的逗号。所以在我上面的例子中,如果我要删除 server2,文件会产生如下结果
server1,server3,server4
所以我已经用谷歌搜索并测试了以下内容,它可以删除 server2 和它后面的逗号(我不知道 b 的确切用途)
sed -i 's/\bserver2\b,//g' myfile
我想要做的是将主机名列表提供给一个小脚本,以删除一堆主机(及其后面的逗号),类似于以下内容。问题在于放置像 $x 这样的变量会破坏脚本,因此什么也不会发生。
#!/bin/ksh
for x in `cat /tmp/list`
do
sed -i 's/\b${x}\b,//g' myfile
done
我认为我非常接近这里的解决方案,但可以使用一些帮助。非常感谢您的热心帮助。
【问题讨论】:
-
与 ${x} 的问题无关,但“for x in
cat /tmp/list”有效,但首选是“while read -r x ... done/list” - 避免生成另一个进程并避免无用地使用 cat -
更多关于在 bash 中一次读取一行文件:mywiki.wooledge.org/BashFAQ/001