2014-11-16 2 views
0

У меня есть этот 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 

но я получаю весь файл .txt?

ответ

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 

Update:

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

Благодаря отлично работает! Есть ли способ обновить это для таких примеров, как: tel: 02134343, 3646848393; , чтобы я мог иметь 02134343 в одной строке и 3646848393 в следующем? – Matthew

+0

Отметьте мое обновление .. –

+0

как я могу изменить команду look for; с строкой bbr? – Matthew

0

Вот еще одно решение для отображения телефонных номеров в специально отформатированный случае

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

Это извлечет отформатирован номера, такие как следует

***-******* 
********** 
*** ******* 
***-***-**** 
Смежные вопросы