我有一个文件,里面有近10000个电话号码,其中许多号码的格式不正确,例如123-456-7890
,尽管我已经清理了大部分,但我仍然有一个模式,我不知道如何处理。我用sed
清理了大部分,不介意使用sed
或awk
,尽管我使用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
它只是删除所有非数字,然后三人一组打印出来。