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

厳密に01から47が必要な場合:(0[1-9]|[123][0-9]|4[0-7])

于 2012-09-27T10:53:07.447 に答える
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 に答える
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」も有効な場合、正規表現は機能しません。2桁を抽出して、スティーブがしたように何かをしなければなりません。

于 2012-09-27T09:23:41.113 に答える