Cygwin - comando egrep para encontrar padrões de um determinado arquivo de texto

0

Fui solicitado a encontrar o conjunto de palavras que começam com uma substring de comprimento 3 contendo os caracteres a, bec, que adicionalmente contém outra substring disjunto contendo os mesmos 3 personagens

ex. abcacb acbbac

me ajude a encontrar um regex para isso. Obrigado

edite: abcbac - a, b, c deve estar lá como as 3 primeiras letras, então a, b, c deve mudar sua ordem das 3 letras anteriores. apenas 6 cadeias de caracteres.

acbbca abccba bacca etc ....

    
por sávi 27.04.2017 / 11:03

2 respostas

2

(Soluções aqui assumindo o GNU grep quando construído com suporte a PCRE (como é tipicamente o caso no cygwin)).

A primeira metade de seus requisitos significaria.

grep -Pwo '(abc|acb|bac|bca|cab|cba)\w*(?1)\w*'

Ou possivelmente:

grep -Pwo '(abc|acb|bac|bca|cab|cba)\w*\w*'

Para o segundo semestre que parece contradizer o primeiro semestre:

grep -Pwo '(abc|acb|bac|bca|cab|cba)(?!)(?1)'

Encontraria as palavras ( palavra sendo definida como uma seqüência de [a-zA-Z0-9_] caracteres neste caso) que começam com uma sequência de 3 caracteres composta por a , b e c (um de cada) seguido por outra dessas sequências ( (?1) referindo-se ao mesmo regexp que no primeiro grupo (...) ), desde que não seja igual ao primeiro ( refere-se à cadeia que foi correspondida pelo primeiro grupo de captura (...) e (?!...) é um operador negativo antecipado ).

$ echo abcbca abcbcax abcabc aaabbb xcabacb abcacb-blah |
    grep -Pwo '(abc|acb|bac|bca|cab|cba)(?!)(?1)'
abcbca
abcacb
    
por 27.04.2017 / 12:47
0

Isso deve ser feito:

grep -Ew '[a-c]{3}.*[a-c]{3}'
  • -E para corresponder aos regexes
  • -w para corresponder apenas a palavras
  • [a-c]{3} corresponderá exatamente a 3 caracteres do a-c set
  • .* corresponderá a qualquer coisa entre
por 27.04.2017 / 11:12

Tags