unix telephone 语法以不同的方式书写美国 phone 数字

unix telephone syntax with different ways of writing American phone numbers

好的,所以我需要一个 .txt 文件,其名称后跟各自的 phone 数字,并且需要获取所有符合 ###-###-#### 语法的数字我已经完成了这段代码

grep -E "([0-9]{3})-[0-9]{3}-[0-9]{4}" telephonefile_P2

但我的问题是有

的实例

(###)-###-####

(###) ### ####

### ### ####

###-####

这是文件:

Sam Spade (212)-756-1045
Daffy Duck 312 450 2856
Mom 354-2015
Star Club 49 040–31 77 78 0
Lolita Spengler (816) 756 8657
Hoffman's Kleider 049 37 1836 027
Dr. Harold Kranzler 765-986-9987
Ralph Spoilsport's Motors 967 882 6534
Hermann's Speilhaus 49 25 8377 1765
Hal Kubrick 44 1289 332934
Sister Sue 978 0672
Auggie Keller 49 089/594 393
JCCC 913-469-8500

这是我想要的输出:

Sam Spade (212)-756-1045
Daffy Duck 312 450 2856
Mom 354-2015
Lolita Spengler (816) 756 8657
Dr. Harold Kranzler 765-986-9987
Ralph Spoilsport's Motors 967 882 6534
Sister Sue 978 0672
JCCC 913-469-8500

而且我不知道如何解释这些替代形式... 显然是 Unix 新手,请温柔对待!

$ awk '/(^|[[:space:]])(\(?[0-9]{3}\)?[- ])?[0-9]{3}[- ][0-9]{4}([[:space:]]|$)/' file
Sam Spade (212)-756-1045
Daffy Duck 312 450 2856
Mom 354-2015
Lolita Spengler (816) 756 8657
Dr. Harold Kranzler 765-986-9987
Ralph Spoilsport's Motors 967 882 6534
Sister Sue 978 0672
JCCC 913-469-8500