我创建了以下awk命令,以便仅打印与主机和ETH参数匹配的行
我的问题是我不知道哪个eth1-8是真正的论点
如果ETH可以是eth0或eth1或eth2 ....等,直到eth8
,如何通过awk打印文件中的行 HOSTNAME=linux1
LAN=eth0|eth1|eth2|eth3|eth4|eth5|eth6|eth7|eth8
awk -v host=$HOSTNAME -v ETH=$LAN '$2 == host && $3 == ETH' file
more file
192.17.200.10 linux1 eth0
192.17.200.10 linux1 eth1
192.17.200.11 linux2 eth2
192.17.200.12 linux3 eth3
192.17.200.13 linux4 eth4
192.17.200.14 linux5 eth5
192.17.200.15 linux6 eth6
192.17.200.16 linux7 eth7
192.17.200.17 linux8 eth8
答案 0 :(得分:1)
使用awk:
hostname=linux1
lan=eth
awk -v host="$hostname" -v lan="$lan" '$2==host && ($3~lan)' yourFile
实际上对你的问题,grep也有效:
grep -P 'linux1\s.*?eth\d' yourFile
如果你想在grep中使用变量:
grep -P "${hostname}\s.*${lan}\d" yourFile
答案 1 :(得分:0)
使用正则表达式指定可能的匹配项,例如:
awk '$2 == "linux1" && $3 ~ /^eth[0-8]$/'
就shell变量而言,你需要类似的东西:
LAN='^eth[0-8]$'
awk -v host=$HOSTNAME -v ETH=$LAN '$2 == host && $3 ~ ETH' file