在文件的每一行中查找邮政编码

时间:2014-07-31 02:16:17

标签: bash shell

我有这个文件,其中文件的每一行都包含一些文本以及格式为12345或23456-2345的邮政编码。我需要从每一行中提取这些zipcodes。我怎么能这样做。

线条可能是这样的

123 Some street, Zipcode, IL, USA
2ND AVE STE 4000,SEATTLE,98104-1075,USA

任何建议

2 个答案:

答案 0 :(得分:0)

在不知道邮政编码可能出现的所有不同方式的情况下,我选择了几个约束..

  1. 邮政编码总是有5位数字,并且可选地带有一个“ - ”后面有任意数字的数字
  2. 邮政编码将始终跟随任意数量的空格和逗号
  3. 假设所有地址都在'ADDRS.txt'......

    grep -oE '[0-9]{5}(-[0-9]*)?[ ]*,' ADDRS.txt | sed 's/,$//'
    

    我们最后使用sed来截断每个grep匹配的逗号。

答案 1 :(得分:0)

由于问题定义不明确,文件格式定义不明确,我认为你不能提出任何更精确的信息,而不是"找到任何五位数的数字字段,后缀可选短划线和四位数"。

grep -oE ',[0-9]{5}(-[0-9]{4})?,' file | tr -d ,

这会找到两个逗号之间的表达式,然后修剪逗号。

perl -ne 'm/(?:,)(\d{5}(?:-\d{4})?)(?:,)/ and say $1' file

在使用反向引用的单个进程中做了很多相同的事情。由于使用单个进程可能会更快,或者由于该进程的大小而变慢(对于小输入文件可能更糟糕?)

如果你真的需要允许字段可选地具有前导和/或尾随空格,那么调整正则表达式应该是微不足道的。