我创建了以下awk命令,以便仅打印与host和ETH参数匹配的行
我的问题是,我不知道哪一个eth1-8是真正的论点
如果ETH可以是eth0、eth1或eth2 ....etc直到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发布于 2011-12-13 18:59:05
使用正则表达式指定可能的匹配项,例如:
awk '$2 == "linux1" && $3 ~ /^eth[0-8]$/'就shell变量而言,您需要类似以下内容:
LAN='^eth[0-8]$'
awk -v host=$HOSTNAME -v ETH=$LAN '$2 == host && $3 ~ ETH' file发布于 2011-12-13 19:10:32
使用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" yourFilehttps://stackoverflow.com/questions/8487959
复制相似问题