下面的代碼工作取得的a
狀態值,如果它的啓用,d
如果禁用,n
如果不存在,從文件如下:這在匹配中是否正確?
# Check whether the service entry exists and whether it is enabled or disabled
# Status value 'a' states that the service is uncommented in /etc/inetd.conf.
# Value 'd' states that the service is commented, and value 'n' specifies
# that the service entry doesnt exist in the configuration file.
status=`awk -v serv=$1 -v proto=$2 -v exist="n" '
BEGIN {
format=sprintf("^[\t ]*%s.*%s",serv,proto);
comformat=sprintf("^[\t ]*#[\t ]*%s.*%s",serv,proto);
}
{
if(match($0,format))
{
exist="a";
}
else if(match($0,comformat))
{
exist="d";
}
}
END {
printf("%s",exist)
}' $INETD`
從以下文件:
ftp stream tcp6 nowait root /usr/sbin/ftpd ftpd
telnet stream tcp6 nowait root /usr/sbin/telnetd telnetd -a
shell stream tcp6 nowait root /usr/sbin/rshd rshd
#kshell stream tcp nowait root /usr/sbin/krshd krshd
login stream tcp6 nowait root /usr/sbin/rlogind rlogind
#klogin stream tcp nowait root /usr/sbin/krlogind krlogind
注意:$1
=文件中的第1列和$2
=文件中的第3列。
所以我關心的是如果上面的搜索使用以下格式足夠好?或者是有任何其它更好的正則表達式:
format=sprintf("^[\t ]*%s.*%s",serv,proto);
comformat=sprintf("^[\t ]*#[\t ]*%s.*%s",serv,proto);
呦如果你有兩個名爲「service」和「service2」的服務,你將會遇到問題:你的正則表達式會匹配這兩個服務。 – fge 2011-12-28 12:12:51
什麼是替代方案?相反,正確的方法來做到這一點? – footy 2011-12-28 12:33:15
嗯,我不知道awk,但是你已經把它分開了。如果我是你,我會用「$ service」或「#$ service」檢查第一個字段是否相等。 – fge 2011-12-28 12:39:33