со страницы руководства:
Чередование
Два регулярных выражения могут быть объединены инфиксным оператором |; результирующее регулярное выражение соответствует любой строке, совпадающей с любым альтернативным выражением.
Вы неверно истолковали это, это не значит, что |;
является оператором чередования, оно говорит, что |
является оператором чередования, точка с запятой разделяет две части предложения.
Кроме того, если вы не используете опцию расширенного регулярного выражения (-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