regex - Grep 正则表达式 : How to find multiple area codes in phone number?

标签 regex linux bash grep

我有一个文件:每一行由一个名字、房间号、住所地址、电话号码组成。

我想搜索区号为 404 或 202 的线路。 我做了“(404)|(202)”,但它也给了我电话号码中的数字而不是区号的行,例如:

John Smith 300 123 N. Street 808-543-2029

我不想要上面的内容,我的目标是这样的行,示例:

Danny Brown 173 555 W. Avenue 202-383-1540
Martha Keith 567 322 S. Example 404-653-1200

最佳答案

让我们考虑这个测试文件:

$ cat addresses
John Smith 202 404 N. Street 808-543-2029
Danny Brown 173 555 W. Avenue 202-383-1540
Martha Keith 567 322 S. Example 404-653-1200

与其他三位数字不同,区号的显着特征是它们前面有一个空格,后面有一个 -。因此,使用:

$ grep -E ' (202|404)-' addresses
Danny Brown 173 555 W. Avenue 202-383-1540
Martha Keith 567 322 S. Example 404-653-1200

更复杂的例子

假设电话号码出现在行尾,但可以是 808-543-20298085432029808 543 2029 三种形式中的任何一种 如以下示例所示:

$ cat addresses
John Smith 202 404 N. Street 808-543-2029
Danny Brown 173 555 W. Avenue 2023831540
Martha Keith 567 322 S. Example 404 653 1200

要选择区号为 202 或 404 的线路:

$ grep -E ' (202|404)([- ][[:digit:]]{3}[- ][[:digit:]]{4}|[[:digit:]]{7})$' addresses
Danny Brown 173 555 W. Avenue 2023831540
Martha Keith 567 322 S. Example 404 653 1200

如果电话号码后面可能有零散的空格,则使用:

$ grep -E ' (202|404)([- ][[:digit:]]{3}[- ][[:digit:]]{4}|[[:digit:]]{7})[[:blank:]]*$' addresses
Danny Brown 173 555 W. Avenue 2023831540
Martha Keith 567 322 S. Example 404 653 1200

关于regex - Grep 正则表达式 : How to find multiple area codes in phone number?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48820773/

相关文章:

linux - 无法在 CentOS 上执行二进制文件 - Zabbix 外部脚本

c# - RegEx.Replace 失败,替换字符串为 $0.00

c# - 正则表达式 C#,获取 2 个字符之间的所有内容,但仅当特定字符位于中间且缺少其他字符时

linux - grep命令搜索

linux - 在 2 个 cron 任务之间处理 "race-condition"。什么是最好的方法?

bash - 为什么 Bash 在与 Curl 一起使用时不会等待读取?

javascript - 帮助编写正则表达式,仅在 <strong> 标签不存在时用 <strong> 标签包围某些文本

python - 选择用\n 分隔的 <p> 标记

linux - 在 Redhat 中如何从文件中提取文本并将其作为正文通过电子邮件发送?

linux - 从文本文件中指定的位置复制文件或将文件复制到文本文件中指定的位置