unix egrep не соответствует определенной группе - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть этот текстовый файл

6 раз: 5 столиц, разделенных пробелом

EWTLE YQTCE FNTMA YVTMB GWTDH QGTAL
UVGEV SPGWP HDAVZ FLRVY HVBFT OFUSG
UKAYH BOAXR BLUSG YRMZT WAIMR BOCCX
BIUCZ KYUPP ECUZI PIURZ MXUMB RDUIG
ANAZW IVAYI QNHFN UPTHC YACTJ QPRLV 

Использование командной строки Unix, egrep. Мне нужно проверить, одинаковый ли средний символ в каждой группе (здесь 4-я строка).

Я пытался отменить результаты, если одна из букв НЕ была одинаковой, используя группу. Но я не могу найти, как это сделать.

egrep -v '[A-Z]{2}([A-Z])[A-Z]{2}.*[A-Z]{2}§NOT GROUP 1§[A-Z]{2}' filename

Как я могу заполнить часть между §?

Решение, которое у меня есть, слишком длинное, просто повторяю одно и то же для каждой группы

egrep '[A-Z]{2}([A-Z])[A-Z]{2} [A-Z]{2}\1[A-Z]{2} 
[A-Z]{2}\1[A-Z]{2} [A-Z]{2}\1[A-Z]{2} [A-Z]{2}\1[A-Z]{2} [A-Z]{2}\1[A-Z]{2}' filename

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Использование опции -P (PCRE):

grep -P '^([A-Z]{2})([A-Z])(?1)(?: (?1)\2(?1)){5}$' file.txt

Выход:

EWTLE YQTCE FNTMA YVTMB GWTDH QGTAL
BIUCZ KYUPP ECUZI PIURZ MXUMB RDUIG

Пояснение:

^               # beginning of line
  ([A-Z]{2})    # group 1, 2 uppercases
  ([A-Z])       # group 2, 1 uppercase
  (?1)          # same pattern as group 1 (i.e. 2 uppercases)
  (?:           # start non capture group
                # 1 space
    (?1)        # same pattern as group 1 (i.e. 2 uppercases)
    \2          # same content as group 2, same letter
    (?1)        # same pattern as group 1 (i.e. 2 uppercases)
  ){5}          # end group, must appear 5 times
$               # end of line
0 голосов
/ 07 ноября 2018

Это немного короче и выполняет то же самое:

[A-Z]{2}([A-Z])[A-Z]{2} ([A-Z]{2}\1[A-Z]{2} ?){5}

Проверьте это здесь: https://www.regextester.com/

...