快速AWK格式问题

时间:2012-09-27 05:46:08

标签: awk

我有一行读取系统地址,其中可以有一个01-47之间的通配符号码(特定地址就像响铃?。host.com)

我正在尝试使用regexp

让awk识别条件参数中的任何数字

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

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

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

提前感谢您的帮助!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分: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并做像史蒂夫那样的事情。