2014-11-07 96 views
0

我有一个包含近10,000个电话号码的文件,其中很多格式不正确,例如, 123-456-7890虽然我已经清理了大部分,但我仍然有一个模式,我不知道如何处理。我以前sed清理大部分不介意使用任何sedawk,虽然我用sed更多的时候则awk,得到最后的群体之一(2306线)格式正确清理格式不正确的电话号码文件

例子:123 4567890( 3标签7)需要为123-456-7890(3号短跑3号短跑4号)。

我知道我能找到的模式,轻松地更换标签不够用:

sed "^[0-9][0-9][0-9]\t[0-9][0-9][0-9][0-9][0-9][0-9][0-9]/s/\t/-/" infile.txt > outfile.txt 

但是,如果我能扩充指令解析7个号码,组合在一起,它会在同一时间让我更容易清理这轮之后剩下的东西。我已经做了大量的搜索,但是当我在发布问题之前输入主题来工作时,我从列表中找不到任何东西。

回答

0

使用扩展的正则表达式与捕获组:

sed -E 's/^([0-9]{3})\t([0-9]{3})([0-9]{4})$/\1-\2-\3/' infile.txt > outfile.txt 
+0

谢谢你,它看起来像它的工作。你介意解释一下'sed'指令与我的相比吗?我需要确定它没有采取任何其他需要清理的模式。 – user3439894 2014-11-07 02:23:13

+0

我在文件上运行了'diff',它只触及目标模式,所以不需要解释指令,因为我会阅读扩展正则表达式,就像我应该那样。再次感谢。 – user3439894 2014-11-07 02:57:35

0

basicaly像这样将一个电话号码单独工作。

sed 's/\([0-9]\)[^0-9]*/\1/g;s/\(...\)\(...\)\(....\)/\1-\2-\3/' YourFile 

现在,你肯定有你的电话号码与其他信息关联,所以提取和过滤是更具体的

0

awk版本:

echo "123 4567890" | awk '{gsub(/[^0-9]/,"");print substr($0,1,3)"-"substr($0,4,3)"-"substr($0,7,3)}' 
123-456-789 

它只是删除所有非数字,然后以三人一组的方式打印出来。