匹配0或1个空格的字符串

时间:2012-07-17 21:04:57

标签: awk

我试图浏览一堆可能包含加拿大邮政编码(格式为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}}

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

使用?

awk '$5~/[a-zA-Z][0-9][a-zA-Z] ?[0-9][a-zA-Z][0-9]/ {print $5}'

答案 2 :(得分:0)

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