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 aaabbb
o 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 contienenoookkk
comooookkkfoobar
grep -w
ejemplo que di en mi respuesta.aaaaaa
o 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
\1
refiere al primer grupo capturado . Puede capturar grupos usando paréntesis. Entonces,\1
es el primer grupo de este tipo y\2
es el segundo y así sucesivamente. Como no tenía grupos capturados,grep
se 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