我试图浏览一堆可能包含加拿大邮政编码(格式为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}}
但是给出了相同的结果。有人能发现我做错了吗?
答案 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
第二部分。