Нахождение строкового образца, используя grep - PullRequest
2 голосов
/ 06 сентября 2010

Я пытаюсь найти определенную последовательность в тексте нескольких файлов .txt. Я ищу строку, которая соединена с 4-значным числом. например Watson1990. Я протестировал регулярное выражение с помощью онлайн-тестера, и он, похоже, работал, однако выражение (или его комбинации) не смогли вывести мои файлы.

Мое регулярное выражение выглядит следующим образом:

egrep '\w*\d{4}' *.txt

Однако он не выдает никаких результатов. Можете ли вы сказать мне, что не так с этим? Я использую OSX (Snow Leopard).

Спасибо.

Ответы [ 3 ]

5 голосов
/ 06 сентября 2010

Причина, по которой ваше регулярное выражение не работает, заключается в том, что в расширенном синтаксисе регулярного выражения токен \d соответствует букве d, а не цифре.Вместо этого используйте класс символов [0-9].

Также \w соответствует цифрам и буквам, так что вы, вероятно, не захотите использовать его здесь.Используйте класс символов [A-Za-z] для сопоставления букв в AZ или az.

Я изменил * на +, потому что, вероятно, вы хотите по крайней мере одну букву перед числом.+ означает «один или более», тогда как * означает «ноль или более».

Наконец, вы можете подумать о том, что должно произойти, если вы увидите 5-значное число.Ваше регулярное выражение в настоящее время принимает его, потому что 5-значное число начинается с 4-значного числа.

В заключение попробуйте следующее:

egrep '[a-zA-Z]+[0-9]{4}' *.txt
1 голос
/ 06 сентября 2010

GNU grep

grep -Po "(\w+\d{4})" file
1 голос
/ 06 сентября 2010

Ваше регулярное выражение использует Perl, а не расширенные компоненты регулярных выражений.Попробуйте

grep -P '\w\d{4}' *.txt

, если в вашей версии grep есть такая опция.Я использую GNU grep 2.5.1, а опция -P указана как «очень экспериментальная».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...