Удаление тега </p> из вывода grep - PullRequest
1 голос
/ 21 марта 2011

У меня есть скрипт bash, который будет искать номера телефонов внутри файлов .htm или .html в каталоге (или рекурсивно, если я этого захочу), чтобы найти номера телефонов в формате (ddd) ddd-dddd или ddd-ddd- dddd (где d представляет собой цифру).

Это мой код:

find ./ -maxdepth 1 -regex ".*\(html\|htm\)$" | xargs grep '\(([0-9]\{3\})\|[0-9]\{3\}\)[-]\?[0-9]\{3\}-[0-9]\{4\}'

Вывод:

./dash_only_phone.htm:800-555-1212</p>
./paren_phone.htm:(800)555-1212</p>

Мне было интересно, как бы я изменил команду grep для удаления распечатки html p-тега в конце.

Спасибо

Ответы [ 3 ]

1 голос
/ 21 марта 2011

Если ваш grep поддерживает регулярные выражения, совместимые с Perl, так же, как GNU и OS X grep:

grep -Po '(\([0-9]{3}\)|[0-9]{3})-?[0-9]{3}-[0-9]{4}(?=</p>)'

Обратите внимание на изменения в экранировании (которые аналогичны или такие же, как для * 1006)*).

0 голосов
/ 21 марта 2011

Вы можете просто добавить переключатель -o, чтобы получить IP

find ./ -maxdepth 1 -regex ".*\(html\|htm\)$" | xargs grep -o '\(([0-9]\{3\})\|[0-9]\{3\}\)[-]\?[0-9]\{3\}-[0-9]\{4\}'
0 голосов
/ 21 марта 2011

Почему бы просто не пропустить вывод через фильтр sed, чтобы удалить его, как в следующей расшифровке:

pax$ echo './dash_only_phone.htm:800-555-1212</p>' | sed 's?</p>$??'
./dash_only_phone.htm:800-555-1212

Это избавит от любых </p> последовательностей, которые появляются в конце строки.

...