grep: проблема с регулярным выражением

grep: проблема с регулярным выражением

Кто-нибудь может объяснить, почему это не работает?

grep -ne '[A-Za-z]{1,30}\ [A-Z][a-z]{1,30}\W[A-Za-z]{1,30}\ [0-9]{1,30}\W[0-9]{5}\ [A-Za-z]{1,30}(\ [A-Za-z]{1,30})?' emails

решение1

Во-первых, вы используете синтаксис расширенного регулярного выражения (ERE), например {}, ()и ?. Добавьте опцию -Eиспользования ERE или экранирования {}и ()с обратными косыми чертами и замените ?следующим образом:grep -ne '[A-Za-z]\{1,30\} [A-Z][a-z]\{1,30\}\W[A-Za-z]\{1,30\} [0-9]\{1,30\}\W[0-9]\{5\} [A-Za-z]\{1,30\}\( [A-Za-z]\{1,30\}\)\{0,1\}' emails

Во-вторых, вы экранируете пробелы с помощью обратных косых черт внутри одинарных кавычек. Хотя большинство реализаций grepбудут обрабатывать это как простые пробелы, стандарт posix считает это неопределенным:Интерпретация обычного символа, которому предшествует обратная косая черта ('\'), не определена.

Могут быть и другие проблемы, но мы не можем знать наверняка, не зная синтаксиса вашего файла и того, что вы хотите исправить.grep

Связанный контент