查找所有电话号码

时间:2014-11-16 12:25:08

标签: regex linux bash sed substring

所以我有这个file.txt,其中包含网页的源代码。我试图将file.txt中的所有电话号码放到另一个文件中,每行一个。源代码中的所有电话号码都卡在字符串tel:;

之间

到目前为止,我已成功将网页的源代码保存到file.txt中:

echo $(wget http://www.some-web-page.com -q -O ) > file.txt

只需打印出我用过的所有电话号码:

sed -e 's/tel:\(.*\);/' file.txt

但我得到整个file.txt?

2 个答案:

答案 0 :(得分:3)

您可以简单地使用grep而不是sed。我选择grep的原因意味着,grep是一个工具,可以在一个单独的行中打印每个匹配。

grep -oP 'tel:\K.*?(?=;)' file.txt

正则表达式:

tel:                     'tel:'
\K                       '\K' (resets the starting point of the
                         reported match)
.*?                      matches any character except \n (0 or more times) non-greedily
(?=                      look ahead to see if there is:
  ;                        ';'
)                        end of look-ahead

<强>更新

$ cat file
tel:02134343, 3646848393; tel:02134343;
tel:02134344;
$ grep -oP '(?:tel:|(?<!^)\G)\K\d*(?=[^;\n]*;)' file
02134343
3646848393
02134343
02134344

答案 1 :(得分:0)

这是另一种在特殊格式的情况下显示电话号码的解决方案

grep -Po 'tel:\d{3}[\s\-_]?\d{3}[\s\-_]?\d{4}' file.txt|cut -f2 -d':'

它将提取格式化的数字,如下所示

***-*******
**********
*** *******
***-***-****