Cygwin: comando egrep para buscar patrones en un archivo de texto determinado

Cygwin: comando egrep para buscar patrones en un archivo de texto determinado

Me pidieron que encontrara el conjunto de palabras que comienzan con una subcadena de longitud 3 que contiene los caracteres a, byc y que además contiene otra subcadena separada que contiene los mismos 3 caracteres.

ex. abcacb acbbac

ayúdame a encontrar una expresión regular para esto. Gracias

editar: abcbac - a,b,c deberían estar allí como las primeras 3 letras, luego a,b,c deberían cambiar su orden con respecto a las 3 letras anteriores. sólo 6 cadenas de caracteres.

acbbca abccba bacbca etc....

Respuesta1

(Las soluciones aquí suponen que GNU grepcuando se construye con soporte PCRE (como suele ser el caso en cygwin)).

La primera mitad de sus requisitos significaría.

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

O posiblemente:

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

Para la segunda mitad eso parece contradecir la primera mitad:

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

encontraría elpalabras(palabradefinido como una secuencia de [a-zA-Z0-9_]caracteres en este caso) que comienzan con una secuencia de 3 caracteres compuesta por a, by c(uno de cada) seguido de otra de dichas secuencias ( (?1)refiriéndose a la misma expresión regular que en el primer (...)grupo) siempre que sea no es lo mismo que el primero ( \1se refiere a la cadena que coincidió con el primer (...)grupo de captura y (?!...)es unmirada negativa hacia adelanteoperador).

$ echo abcbca abcbcax abcabc aaabbb xcabacb abcacb-blah |
    grep -Pwo '(abc|acb|bac|bca|cab|cba)(?!\1)(?1)'
abcbca
abcacb

Respuesta2

Esto debería hacerlo:

grep -Ew '[a-c]{3}.*[a-c]{3}'
  • -Epara que coincida con expresiones regulares
  • -wpara unir solo palabras
  • [a-c]{3}coincidirá exactamente con 3 caracteres del a-cconjunto
  • .*coincidirá con cualquier cosa entre

información relacionada