我会定期收到一个文本文件,其中的电话号码格式各不相同:##########
、###-###-####
、(###) ###-###
等。通常有十位数字,但我见过+1 (###) ###-####
.
最终该文件被导入到数据库中,但由于我不会进入的原因,让电话号码具有标准格式会很方便,(###) ###-####
.
唯一不变的是电话号码总是落在每行的第二个和第三个制表符之间。
有没有办法从命令行做到这一点?
我会定期收到一个文本文件,其中的电话号码格式各不相同:##########
、###-###-####
、(###) ###-###
等。通常有十位数字,但我见过+1 (###) ###-####
.
最终该文件被导入到数据库中,但由于我不会进入的原因,让电话号码具有标准格式会很方便,(###) ###-####
.
唯一不变的是电话号码总是落在每行的第二个和第三个制表符之间。
有没有办法从命令行做到这一点?
您可以构造一个匹配任何格式的正则表达式,并捕获数字,然后将它们重新替换为您想要的格式。
例如,要使用扩展正则表达式 (ERE) 匹配和捕获可选用括号括起来的三个十进制数字序列,您可以编写
\(?([0-9]{3})\)?
while[- ]?
匹配可选的连字符或空格。以这种方式建立将匹配可选用括号括起来的 3 位数字,可选地后跟连字符或空格,然后匹配更多位可选地后跟连字符或空格,后跟 4 位数字。
sed
在替换中应用表达式:只要文件与您描述的一样,这应该涵盖您。该命令保留电话号码前后的信息,并按照您要求的方式对其进行格式化。如果输出看起来不错,请添加
-i
选项以sed
在适当的位置对其进行编辑或在最后使用输出重定向提供它> output_file
。我在包含此文本的文件上对其进行了测试:
输出是:
您需要匹配该字段并重新格式化它;这是一个 awk 脚本,它查找三个变体并重新格式化它们(在默认打印重组行之前):
将其保存到文件中,也许是
phone.awk
,然后使用: 调用它awk -F $'\t' -f phone.awk < input
。