script recursively bash search

bash - recursively - ¿Cómo puedo contar las ocurrencias de una cadena dentro de un archivo?



find recursively in directory linux (4)

Simplemente toma este código como un ejemplo. Fingiendo que es un archivo HTML / texto, si me gustaría saber el número total de veces que aparece ese echo , ¿cómo puedo hacerlo usando bash?

new_user() { echo "Preparing to add a new user..." sleep 2 adduser # run the adduser program } echo "1. Add user" echo "2. Exit" echo "Enter your choice: " read choice case $choice in 1) new_user # call the new_user() function ;; *) exit ;; esac


El número de ocurrencias de cadena (no líneas ) se puede obtener usando grep con la opción -o y wc (conteo de palabras):

$ echo "echo 1234 echo" | grep -o echo echo echo $ echo "echo 1234 echo" | grep -o echo | wc -l 2

Entonces, la solución completa para su problema sería así:

$ grep -o "echo" FILE | wc -l


Esto generará la cantidad de líneas que contienen su cadena de búsqueda.

grep -c "echo" FILE

Sin embargo, esto no contará el número de ocurrencias en el archivo (es decir, si tiene eco varias veces en una línea).

editar:

Después de jugar un poco, puedes obtener el número de ocurrencias usando este pequeño y sucio código:

sed ''s/echo/echo/n/g'' FILE | grep -c "echo"

Básicamente, esto agrega una línea nueva después de cada instancia de eco, por lo que cada uno está en su propia línea, lo que permite a grep contar esas líneas. Puede refinar la expresión regular si solo desea la palabra "eco", en oposición a "eco", por ejemplo.


Estoy tomando algunas conjeturas aquí, porque no entiendo muy bien lo que estás preguntando.

Creo que lo que quieres es contar el número de líneas en las que aparece el patrón ''echo'' en el archivo dado.

He pegado el texto de muestra en un archivo llamado 6741967 .

Primero, grep encuentra las coincidencias:

james@Brindle:tmp$grep echo 6741967 echo "Preparing to add a new user..." echo "1. Add user" echo "2. Exit" echo "Enter your choice: "

Segundo, use wc -l para contar las líneas

james@Brindle:tmp$grep echo 6741967 | wc -l 4


si solo quieres el número de ocurrencias entonces puedes hacer esto, $ grep -c "string_to_count" file_name