我的文件中包含近10,000个电话号码,其中许多格式不正确,例如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个数字,这些数字被组合在一起,同时它会让我更容易清理这轮之后剩下的内容。我已经做了相当多的搜索,虽然在输入主题之前我无法从列表中找到任何东西,然后才能发布问题。
答案 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
它只删除所有非数字,然后以三个为一组打印出来。