0

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

我正在尝试使用正则表达式让 awk 识别条件参数中的任何这些数字

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

/ring[0-4][0-7].host.com/{ (rest of blah blah blah goes here)}

我知道这可以给我值 00,但我可以放心地假设在这种情况下它将在 01-47 连接。

在此先感谢您的帮助!

4

3 回答 3

1

您可以使用一些花哨的正则表达式,或者您可以简单地测试该数字是否不等于“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
于 2012-09-27T06:09:39.160 回答
1

如果您严格要求 01 到 47:(0[1-9]|[123][0-9]|4[0-7])

于 2012-09-27T10:53:07.447 回答
0

如果“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”也有效,则您的正则表达式将不起作用。你必须提取 2digits 并做类似 steve 的事情。

于 2012-09-27T09:23:41.113 回答