我正在尝试在脚本中使用 sed 命令来搜索以 HOST 开头的行,然后检查主机名的匹配模式并在 LDAP 配置文件中添加缺少的模式。
LDAP.CONF 中的示例条目
HOST nzlsfn55.zeus.ghsewn.com nzlsfn60.zeus.ghsewn.com nznsfn60.zeus.ghsewn.com
现在我如何搜索模式并使用 sed 添加缺少的条目,任何帮助将不胜感激。
如果您有主机列表并想添加缺少的主机:
#!/bin/bash
for arg; do
grep &>/dev/null "^HOST \+.*\<$arg\>" ||
sed -i "s/$/ $arg/" /etc/ldap/ldap.conf
done
像这样使用脚本:
./script host1 host2 host3
测试前备份你的/etc/ldap/ldap.conf
。(没有在那里测试)
编辑
为了满足您的新要求,请参阅以下代码:
#!/bin/bash
hosts="host1 host2 host3"
for arg in $hosts; do
grep &>/dev/null "^HOST \+.*\<$arg\>" ||
sed -i "s/$/ $arg/" /etc/ldap/ldap.conf
done
我使用下面的代码来完成我的任务,我相信我的代码必须有更简单的方法或需要改进 - 感谢大家的输入
如果 [ -e /etc/openldap/ldap.conf ]; 然后
entries=`grep -i host /etc/openldap/ldap.conf`
count=`grep -i host /etc/openldap/ldap.conf | wc -w`
else
echo " no ldap.conf file available "
exit
fi
#if condition checking for no host entry
if [ $count -eq 0 ];
then
echo " no host entry available in config file "
exit
fi
#if condition checking for less than 3 ldap entries
if [ $count -eq 4 ];
then
echo " `hostname` has the following ldap entries : $entries "
else
#less then than 3 entries will get updated here
if [ $count -lt 4 ];
then
sed -i.bak 's/^host.*\|^HOST.*/host nzlsfn55.zeus.ghsewn.com nzlsfn60.zeus.ghsewn.com nznsfn60.zeus.ghsewn.com/' /etc/openldap/ldap.conf
echo " Sucessfully added LDAP hosts"
fi
我会用GNU awk
这个。假设您在名为 的文件中有一个主机列表(行分隔)hosts.txt
,您可以运行以下命令:
awk -f script.awk hosts.txt /etc/ldap/ldap.conf > new_ldap.conf
内容script.awk
:
FNR==NR {
hosts[$0]++
next
}
/^HOST/ {
for (j=2; j<=NF; j++) {
array[$j]++
}
for (i in hosts) {
if (!(i in array)) {
$0 = $0 OFS i
}
}
delete array
}1