Quiero averiguar y mostrar la cantidad total de subcadenas TTT encontradas en las primeras 2,000 líneas en el archivo.
Había estado usando grep hasta que lo probé, y me di cuenta de que no identifica subcadenas.
Si está buscando la aparición de 3 caracteres "T" consecutivos en un archivo, puede hacerlo con grep. ¿Qué intentaste que no funcionó? Y, si solo desea verificar las primeras 2.000 líneas del archivo, puede canalizar la salida del comando head en grep. Por ejemplo, head -n 2000 somefile.txt | grep "TTT"
si desea un recuento de las líneas en el archivo que contiene "TTT", puede usar lo siguiente:
head -n 2000 somefile.txt | grep -c "TTT"
Si algunas líneas pueden tener múltiples ocurrencias y desea contar todas las ocurrencias en lugar de solo la cantidad de líneas que contienen "TTT", use la -o
opción para grep , que mostrará cada ocurrencia en una línea separada y luego canalizará la salida en el wc comando, que luego mostrará un recuento de todas las apariciones de "TTT" dentro de las primeras 2000 líneas del archivo:
head -n 2000 somefile.txt | grep -o "TTT" | wc -l
Explicación
Normalmente, la búsqueda
TTT
(3 T's) enTTTTTT
(6 T's) produce solo 2 coincidencias porque la búsqueda de la siguiente coincidencia se realiza justo después de encontrar la coincidencia anterior.Trataré de ilustrar:
Solución
Si desea considerar
TTTTTT
como cuatro instancias deTTT
, entonces le sugiero que coincida con un solo carácter y luego use lookaround para completar su patrón de coincidencia.Usaré un lookahead en mi solución:
Explicaciones para la
grep
parte:grep
que admita la expresión regular de Perl para usar lookahead; en mi sistema necesito especificar eso para/usr/gnu/bin/grep
-P
para activar el modo de expresión regular de Perl-o
para mostrar cada aparición en una línea separada para permitirwc -l
contar cada coincidencia'T(?=TT)'
es una expresión regular para coincidirT
que es seguida porTT
(usando una búsqueda anticipada); Después de encontrar una coincidencia, el motor de expresión regular comenzará en el segundoT
para tratar de encontrar la siguiente coincidencia, permitiendo que ese segundoT
sea parte de la siguiente coincidencia si se ajusta al patrón.Ejemplo
Usando su cadena de muestra del comentario:
y procesarlo con la expresión regular anterior:
Producirá:
lo que significa:
Ilustración:
fuente