有没有办法像这样在“ awk”命令中将bash中的子字符串与通配符进行比较
awk '{for(i=1;i<=NF;i++) if ($i=="redis-*") print $(i+1)}' /etc/redis/sentinel.conf | head -1
我希望该命令从sentinel.conf文件中查找任何以“ redis-”开头的字符串,例如redis-pers,redis-test,redis-session等。
我不想grep字符串(例如redis-test),而是grep通配符后的字符串。
因此,如果sentinel.conf文件中的一行像tis
sentinel known-slave redis-test 192.168.1.100 6379
,我想返回192.168.1.100
答案 0 :(得分:2)
Awk没有所需的glob(通配符)语法,但是您可以将模式转换为正则表达式,并使用~
运算符进行匹配:< / p>
if ($i ~ /^redis-/)
正则表达式比shell全局函数更强大-任何全局模式都可以表示为regexp(反之亦然)。