Estoy buscando una expresión regular que encuentre todas las apariciones de caracteres dobles en un texto, una lista, etc. en la línea de comando (Bash).
Principal Pregunta : ¿Hay una manera sencilla para buscar secuencias como aa
, ll
, ttttt
, etc, donde se define una expresión regular que busca n ocurrencias del mismo carácter con? Lo que estoy buscando es lograr esto en un nivel muy muy básico. En la línea de comando. En un Shell de Linux.
Después de bastante investigación llegué a las siguientes respuestas, y las preguntas resultantes de ellas, por lo que me dieron una pista de dónde podría estar la solución. Pero:
a) (e) grep y el problema de la barra invertida
grep 'a\{2\}'
buscaaa
egrep'a{2}'
buscaaa
Pregunta: ¿La necesidad de establecer contragolpes está realmente vinculada al comando que uso? Si es así, ¿alguien puede darme una pista de qué más se debe tener en cuenta al usar (e) grep aquí?
b) Encontré esta respuesta aquí para mi pregunta, aunque no es exactamente lo que estaba buscando:
grep -E '(.)\1' filename
busca entradas con el mismo carácter que aparecen más de una vez, pero no pregunta con qué frecuencia . Esto está cerca de lo que estoy buscando, pero todavía quiero establecer una serie de repeticiones.
Probablemente debería dividir esto en dos o más preguntas, pero no quiero inundar este increíble sitio aquí.
PD: Otra pregunta, posiblemente fuera de tema, pero: ¿es in
, inside
, at
o on the shell
. ¿Y es on the command line
correcto?
egrep
si necesito expresiones regulares (en lugar de solo una simple coincidencia de cadenas) para no tener que preocuparme por recordar las diferencias entregrep
los dos tipos de expresiones regulares.grep '\(.\)\1\{3\}'
es estándar,grep -E '(.)\1{3}'
no lo es.Esto buscaría 2 o más ocurrencias del mismo personaje:
Si su awk tiene la opción -o, esto lo imprimirá cada partido en una nueva línea.
Para encontrar coincidencias con exactamente 3 coincidencias:
O 3 o más:
etc.
editar
En realidad, @stephane_chazelas tiene razón sobre las referencias anteriores y -E. Me había olvidado de eso. Lo probé en BSD grep y GNU grep y funciona allí, pero no está en otros greps. Debería usar una de las versiones a continuación.
Versiones regulares de grep:
La
-o
opción tampoco es grep estándar BTW (probablemente si su grep entiende -o también puede hacer la referencia inversa).Nota : el
grep -E '(.)\1{2,}'
archivo y elgrep '\(.\)\1\{2\}'
archivo son incorrectos como lo indicó alexis y deben ignorarse.fuente
-E
opcióngrep
no haría mucho? ¡Esto explicaría bastante, por ejemplo, por qué perdí tanto tiempo buscando dónde me equivoqué!+
operador. También publicaré ejemplos.grep -E '(.)\1{2}'
no exactamente "Encuentra coincidencias con exactamente 3 coincidencias". Si bien coincidirá exactamente con tres caracteres idénticos, pueden incrustarse en una cadena repetida más larga; por ejemplo, coincidirá en la cadena de 5 símbolosAAAAA
. (Y si hay 6 o más símbolos consecutivos, coincidirá más de una vez).Primero, gracias a todos por sus comentarios y sugerencias de apoyo. Resulta que ya estaba bastante cerca de la respuesta.
El problema principal era sobre:
Respuesta corta :
Los siguientes [variaciones de] comandos se repetirán
a
al menos una e infinitas vecesgrep 'a\{1,}
grep -E \(a\)\{1,\}
egrep a{1,}
o con GNU Expresiones regulares disponibles
grep a\+
El número de repeticiones se establece dentro de las llaves, a través del patrón
{min,max}
→{n}
repetir exactamente lasn
veces,{n,}
repetir al menosn
veces y{n,m}
repetir al menosn
pero en la mayoría de lasm
veces.Por lo tanto, como consecuencia, planteó la cuestión secundaria :
Respuesta corta : Sí, el uso de barras invertidas depende de si uno usa
grep
oegrep
grep
: la barra diagonal inversa activa metacaracteres [utiliza expresiones regulares básicas]egrep
barra invertida de -activates metacaracteres [usos expresiones regulares extendidas]Como esta es la respuesta corta, quiero proporcionarles a aquellos que se encontraron con problemas comparables, agregué mi resumen básico de lo que aparentemente uno tiene que tener en cuenta, trabajando con
grep
yegrep
.Expresiones regulares básicas, extendidas y GNU
Expresiones Regulares Básicas
Utilizado en
grep
,ed
ysed
comandosLas características básicas del conjunto de expresiones regulares son:
? [ . \ )
etc., se activan mediante una barra invertida. Si no hay barra invertida, se tomarán como (parte del) término de búsqueda.^ $ \<
y\>
son compatibles sin una barra invertida\b
,\s
, etc.]Las expresiones regulares básicas de GNU se suman a estas
\?
repite el carácter cero o una vez (c\?
coincidec
ycc
) y es una alternativa para\{0,1\}
\+
repite un personaje al menos una vez (c\+
coincidenciascc
,cccccccc
etc.) y es una alternativa para\{1,\}
\|
es compatible (por ejemplogrep a\|b
, buscaráa
ob
grep -E
permite que el comando use todo el conjunto de Expresiones regulares extendidas:Expresiones regulares extendidas [ERE]
Se utiliza en
egrep
,awk
yemacs
es el conjunto básico más algunas características bastante.GNU Extendnd Expresiones regulares
agrega las siguientes características
Los dos enlaces lo dirigirán a regular-expressions.info que, además del increíble soporte que tengo aquí, realmente me ayudó mucho.
fuente