Así que estoy tratando de encontrar palabras de 6 letras que consisten en un carácter repetido tres veces seguido de otro carácter repetido tres veces. Por ejemplo aaabbbo oookkk.
Estoy intentando:
grep -E "[a-z]\1{3}\S[a-z]\1{3}" filename
Primero, ¿es correcta la expresión regular? Segundo, ¿por qué me estoy poniendo grep: Invalid back reference?
command-line
grep
regular-expression
Destacados de fábrica
fuente
fuente

aaabbbfoobar? ¿Qué hay deaaaabbb? Idealmente, muéstranos alguna entrada de ejemplo y tu salida deseada.grep -E '([a-z]{2})([0-9]{2})\2\1'coincidiríaaa9999aa.oookkk(no más de 6 caracteres) no palabras que contienenoookkkcomooookkkfoobargrep -wejemplo que di en mi respuesta.aaaaaao necesitas al menos dos personajes diferentes? Considere darnos una entrada de ejemplo y la salida deseada.Respuestas:
No, no es correcto. No tengo idea de qué
\1{3}se supone que es, pero eso es lo que te está causando problemas. Si desea buscar líneas que contengan tres caracteres repetidos seguidos de otros tres caracteres repetidos, puede usar esto:El se
\1refiere al primer grupo capturado . Puede capturar grupos usando paréntesis. Entonces,\1es el primer grupo de este tipo y\2es el segundo y así sucesivamente. Como no tenía grupos capturados,grepse quejaba de una referencia no válida ya que no tenía nada a lo que referirse. Entonces, en la expresión regular anterior, los paréntesis capturan los dos grupos. Entonces, usted quiere{2}y no,{3}ya que la coincidencia inicial también se cuenta.No especifica si necesita que la coincidencia sea una palabra o si también desea coincidir dentro de las palabras. Si desea que la palabra completa coincida (y excluya cosas como
aaaabbb, use esto en su lugar:Para imprimir solo la parte coincidente de la línea (la palabra) y no toda la línea, use (solo GNU grep):
fuente