Как реализовать чередование с регулярными выражениями (только базовые регулярные выражения) в grep?

Сawk:

awk -F, '{print $2}' /path/to/input

Сcut:

cut -d, -f2 /path/to/input
0
21.06.2019, 02:02
2 ответа

Простой :Для BREневозможно иметь чередование

POSIX BRE does not support any other features. Even alternation is not supported.

Ваша основная цель:

My goal now is to match... separately... with Basic Regular Expressions.

Возможно с BRE:

$ str='AAAAAA======-----======AAAAAAAAA'
$ echo "$str" | grep -Eo '(.)\1*'
AAAAAA
======
-----
======
AAAAAAAAA

Или даже с несколькими шаблонами в BRE grep:

$ echo "$str" | grep -o -e 'AA*' -e '--*' -e '==*'
AAAAAA
======
-----
======
AAAAAAAAA

Или ограничьте свое решение GNU grep (позволяет \|как чередование даже в синтаксисе BRE; что не является допустимой функцией POSIX):

$ echo "$str" | grep -o '\(AA*\)\|\(==*\)\|\(--*\)'

Но ваша второстепенная цель:

is it also possible to additionally put them in separate capture groups as well?

Требует только одного регулярного выражения, а поскольку в BRE невозможно чередование, это невозможно.

Очень хорошее объяснение чередования в BRE

2
28.01.2020, 02:30

Для сопоставления строк повторяющихся символов с базовыми регулярными выражениями:

$ echo 'AAAAAA======-----======AAAAAAAAA' | grep -o '\(.\)\1*'
AAAAAA
======
-----
======
AAAAAAAAA

.соответствует любому символу. \(.\)соответствует любому символу и сохраняет этот символ в группе захвата 1. \1*соответствует любым дополнительным вхождениям того же символа.

Использование обратных -ссылок, таких как \1, в BRE поддерживается POSIX .

1
28.01.2020, 02:30

Теги

Похожие вопросы