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

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

感觉如果可能的话,我将不得不做某种嵌套的 sed 条件替换。

谁能帮忙?

4

4 回答 4

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
于 2013-08-31T08:18:27.600 回答
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
于 2013-08-31T07:14:01.813 回答
1

使用这个 perl 单行:

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

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

于 2013-08-31T07:14:10.717 回答
1

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

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

用于-i文件的就地编辑

于 2013-08-31T11:16:09.327 回答