Два регулярных выражения в grep с чередованием - PullRequest
0 голосов
/ 29 марта 2012
'^\{[a-z]*:[0-9]*\}$|;^[a-z]=[0-9]$' 

Что не так?В документации (справочная страница) сказано, что |является оператором чередования.

1 Ответ

6 голосов
/ 29 марта 2012

со страницы руководства:

Чередование
Два регулярных выражения могут быть объединены инфиксным оператором |; результирующее регулярное выражение соответствует любой строке, совпадающей с любым альтернативным выражением.

Вы неверно истолковали это, это не значит, что |; является оператором чередования, оно говорит, что | является оператором чередования, точка с запятой разделяет две части предложения.

Кроме того, если вы не используете опцию расширенного регулярного выражения (-E), вам нужно будет экранировать |:

Базовые и расширенные регулярные выражения
В основных регулярных выражениях метасимволы?, +, {, |, (И) теряют свое особое значение; вместо этого используйте версии с обратной косой чертой \ ?, \ +, \ {, \ |, \ (и \).

Конечный результат может выглядеть примерно так:

grep -E '^\{[a-z]*:[0-9]*\}$|^[a-z]=[0-9]$' some_file

или без опции -E:

grep '^{[a-z]*:[0-9]*}$\|^[a-z]=[0-9]$' some_file
...