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



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

行可以像这样

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

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

  1. 邮政编码将始终为5位数字,并可选择在后面带有任意位数的'-'
  2. 邮政编码后面总是跟着任意数量的空格和逗号

假设所有地址都在'ADDRS.txt'中…

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

我们在末尾使用sed从每个grep匹配中截断逗号。

对于这样一个定义不佳的问题,以及定义不佳的文件格式,我认为你不可能想出比"找到任何五位数的数字字段,带有一个可选的连字符和四位数后缀"更精确的方法。

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

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

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

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

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

最新更新