电话号码列表操作嵌套SED

时间:2013-08-31 07:11:11

标签: regex bash sed awk

还是电话操纵。 我有一个电话号码列表如下:

(855) 422-6932
(899) 991-9054
(855) 912-7326
(833) 390-8072
(867) 934 2368
(898) 731 7056
(899) 251 5372
(855) 137-6285
(855) 294-5537
(844) 680-7479

如果您注意到第5到7行的电话号码模式,则它没有“ - ” 如何使用sed或awk插入“ - ”?

如果可能的话,我觉得我必须做一些嵌套的sed条件替换。

任何人都可以帮忙吗?

4 个答案:

答案 0 :(得分:4)

您可以告诉sed将第二个空格替换为连字符:

sed 's/ /-/2' file

结果:

(855) 422-6932
(899) 991-9054
(855) 912-7326
(833) 390-8072
(867) 934-2368
(898) 731-7056
(899) 251-5372
(855) 137-6285
(855) 294-5537
(844) 680-7479

答案 1 :(得分:3)

这与你提出的其他问题很接近。尝试修改你拥有的东西。

awk '!/-/ {$0=$1 " " $2 "-" $3}1'
(855) 422-6932
(899) 991-9054
(855) 912-7326
(833) 390-8072
(867) 934-2368
(898) 731-7056
(899) 251-5372
(855) 137-6285
(855) 294-5537
(844) 680-7479

答案 2 :(得分:1)

使用这个perl one-liner:

perl -pe "s/(\(\d{3}\) \d{3})[ -](\d{4})/$1-$2/g" <in.txt >out.txt

根据操作系统和shell,您可能需要使用单引号来保留反斜杠和$ chars。

答案 3 :(得分:1)

使用perl,您基本上可以使用正确的格式重写每一行。我假设每行上正好有3组数字:

perl -ne 'printf "(%s) %s-%s\n", (/\d+/g)' file

使用-i进行文件的就地编辑