0

我试图浏览一堆可能包含加拿大邮政编码(格式A0A 0A0)的数据,并想要打印那些行。中间可能有也可能没有空格。我尝试了以下正则表达式:

awk '{if($5~/[a-zA-Z][0-9][a-zA-Z] +[0-9][a-zA-Z][0-9]/){print $5}}

这将返回确实有空格的行。我认为'+'会使它返回有无的两条线。我也试过:

awk '{if($5~/[a-zA-Z][0-9][a-zA-Z][ ]+[0-9][a-zA-Z][0-9]/){print $5}}

但这给出了相同的结果。有人能发现我做错了什么吗?

4

3 回答 3

2

Plus 指定重复一次或多次的内容,这可能不是您想要的。您需要一个问号,这将使前面的项目成为可选项目。

awk '{if($5~/[a-zA-Z][0-9][a-zA-Z] ?[0-9][a-zA-Z][0-9]/){print $5}}
于 2012-07-17T21:10:40.090 回答
1

用一个?

awk '$5~/[a-zA-Z][0-9][a-zA-Z] ?[0-9][a-zA-Z][0-9]/ {print $5}'
于 2012-07-17T21:11:30.413 回答
0

似乎它A0A 0A0分为awk两个字段(默认为空格),因此您应该更改FS(字段分隔符)变量或$5与第一部分和$6第二部分进行比较。

于 2012-07-17T21:10:42.840 回答