我有这个文件,其中文件的每一行都包含一些文本以及格式为12345或23456-2345的邮政编码。我需要从每一行中提取这些zipcodes。我怎么能这样做。
线条可能是这样的
123 Some street, Zipcode, IL, USA
2ND AVE STE 4000,SEATTLE,98104-1075,USA
任何建议
答案 0 :(得分:0)
在不知道邮政编码可能出现的所有不同方式的情况下,我选择了几个约束..
假设所有地址都在'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
在使用反向引用的单个进程中做了很多相同的事情。由于使用单个进程可能会更快,或者由于该进程的大小而变慢(对于小输入文件可能更糟糕?)
如果你真的需要允许字段可选地具有前导和/或尾随空格,那么调整正则表达式应该是微不足道的。