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



我有一个文件,里面有近10000个电话号码,其中许多号码的格式不正确,例如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个数字,同时这将使我更容易清理本轮之后剩下的内容。我已经做了相当多的搜索,尽管在发布问题之前,当我输入主题进行工作时,我无法从列表中找到任何内容。

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

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

基本上,这样的东西只适用于一个电话号码。

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

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

awk版本:

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

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

最新更新