从逗号分隔的文件中删除主机

问题描述 投票:0回答:1

我正在尝试编写一种脚本,以从Nagios Core中的主机组文件中删除主机。主机组文件的格式为:

server1,server2,server3,server4

[删除服务器时,我不仅需要删除服务器,还需要删除其后的逗号。因此,在上面的示例中,如果要删除server2,则文件的结果如下所示

server1,server3,server4

所以我已经用Google搜索并测试了以下内容,该内容可以删除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

我想我在这里已经很接近解决方案了,但是可以使用一些帮助。在此先感谢您的帮助。

bash nagios
1个回答
0
投票

使用单引号告诉外壳程序不要替换$ {x}-从技术上讲,如果您想用Google搜索,它会变成变量插值。https://www.tldp.org/LDP/abs/html/quotingvar.html

while read -r del; do sed -i "s/\b${del},\b//g" myfile; done < /tmp/list

但是由于最后一个字段后面没有逗号,所以最好运行两个sed命令,一个命令查找\ bword,\ b,另一个查找,word $-其中\ b是单词边界$是行尾。

while read -r del; do sed -i "s/\b${del},\b//g" myfile; sed -i "s/,${del}$//" myfile ; done < /tmp/list
© www.soinside.com 2019 - 2024. All rights reserved.