1

我有文件调用 phonenum.txt ,其中包含已通过 procmail 配方从文件中过滤的电话号码列表:

60123456098,60135673434,60149023459,60123456334

根据此文件,需要满足两个条件才能获得其输出。

  1. 输出必须通过数字 60(它的国家代码,所以它是我可以在所有数字之间使用的唯一常量)和这些数字前面的“,”符号来区分。例如:60135673434 ..
  2. 如果号码 60 在电话号码中间怎么办?例如:60123456098如何获得整数的输出?

无论如何,我可以通过在 awk 或 sed 中使用匹配正则表达式来获取电话号码吗?

4

5 回答 5

1
awk -F, '{for(i=1;i<=NF;i++)if($i~/^60/){print "phone number is ",substr($i,3)}}' your_file

Tested Below:

> cat temp
60123456098,60135673434,60149023459,60123456334,90123456789
> nawk -F, '{for(i=1;i<=NF;i++)if($i~/^60/){print "phone number is ",substr($i,3)}}' temp
phone number is  123456098
phone number is  135673434
phone number is  149023459
phone number is  123456334
>
于 2012-12-31T10:28:52.087 回答
1

你可以做

awk -v RS="," '{gsub(/^60/,"")} 1' file

如果你想要回一行

awk -v RS="," '{gsub(/^60/,"")} {printf s $0; s=","}' file
于 2012-12-31T13:28:16.630 回答
0

sed使用 using进行全局替换怎么样(^|,)60

$ sed -r 's/(^|,)60/\1/g' <<< 60123456098,60135673434,60149023459,60123456334 
123456098,135673434,149023459,123456334

正则说明:

s/          # Substitution 
(^|,)       # Match start of the line or comma (captured)
60          # Followed by the literal 60 
/           # Replace with
\1          # Captured group (put back the comma) 
/g          # Global flag
于 2012-12-31T13:47:02.750 回答
0
$ grep -oP '(?<=\b60)\d+' <<< "60123456098,60135673434,60149023459,60123456334"
123456098
135673434
149023459
123456334
于 2012-12-31T14:54:49.877 回答
0

这可能对您有用(GNU sed):

sed 's/^60//;s/,60/\n/g;P;D' file
于 2013-01-02T18:51:00.170 回答