未正确格式化的电话号码的清理文件

时间:2014-11-07 02:02:11

标签: regex macos bash awk sed

我的文件中包含近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个数字,这些数字被组合在一起,同时它会让我更容易清理这轮之后剩下的内容。我已经做了相当多的搜索,虽然在输入主题之前我无法从列表中找到任何东西,然后才能发布问题。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

基本上像这样的东西仅适用于电话号码。

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

现在,您确实将您的电话号码与其他信息相关联,因此提取和过滤更具体

答案 2 :(得分: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

它只删除所有非数字,然后以三个为一组打印出来。