快速AWK格式化问题

快速AWK格式化问题,awk,Awk,我有一行正在读取系统地址,其中01-47之间可以有一个通配符(具体地址类似于ring???.host.com) 我试图让awk使用regexp识别条件参数中的任何数字 到目前为止,这是我提出的,但似乎不正确 /ring[0-4][0-7].host.com/{ (rest of blah blah blah goes here)} 我知道这可能会给我值00,但我可以安全地假设在本例中,它将在01-47连接 提前感谢您的帮助 您可以使用一些奇特的正则表达式,或者您可以简单地测试数字是否不等于“0

我有一行正在读取系统地址,其中01-47之间可以有一个通配符(具体地址类似于ring???.host.com)

我试图让awk使用regexp识别条件参数中的任何数字

到目前为止,这是我提出的,但似乎不正确

/ring[0-4][0-7].host.com/{ (rest of blah blah blah goes here)}
我知道这可能会给我值00,但我可以安全地假设在本例中,它将在01-47连接


提前感谢您的帮助

您可以使用一些奇特的正则表达式,或者您可以简单地测试数字是否不等于“00”且小于或等于47。使用
GNU awk
,或许您可以尝试以下方法:

awk -r '/ring[0-9]{2}\.host\.com/ { string = substr($0, 5, 2); if (string != "00" && string <= 47) print }' file.txt
awk-r'/ring[0-9]{2}\.host\.com/{string=substr($0,5,2);如果(string!=“00”&&string如果“00”是您唯一担心的情况,那么:

awk '/ring[0-4][0-7]\.host\.com/ && !/ring00\.host\.com/{blahblah}'
例如:

kent$  echo "ring00.host.com
dquote> ring01.host.com
dquote> ring10.host.com"|awk '/ring[0-4][0-7]\.host\.com/ && !/ring00\.host\.com/'
ring01.host.com
ring10.host.com

如果“39”也是有效的,你的正则表达式将无法工作。你必须提取2位数字并像steve那样做。

如果你想严格地从01到47:
(0[1-9]|[123][0-9]|4[0-7])

非常感谢!我发现我的核心问题很愚蠢(忘记了一个字段标记的美元),但这帮了我的忙!