web-dev-qa-db-fra.com

Comment compter les occurrences d'une chaîne dans un fichier?

Prenons juste ce code comme exemple. Comme si c’était un fichier HTML/texte, si je veux savoir le nombre total de fois où echo apparaît, comment puis-je le faire avec 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 
60
Leo Chan

Cela produira le nombre de lignes contenant votre chaîne de recherche.

grep -c "echo" FILE

Toutefois, cela ne comptera pas le nombre d’occurrences dans le fichier (c’est-à-dire si vous avez répété plusieurs fois sur une ligne).

modifier:

Après avoir joué un peu, vous pouvez obtenir le nombre d’occurrences en utilisant ce petit morceau de code sale:

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

Cela ajoute en gros une nouvelle ligne après chaque instance d’écho afin qu’elles soient chacune sur leur propre ligne, ce qui permet à grep de compter ces lignes. Vous pouvez affiner l'expression régulière si vous ne voulez que le mot "echo", par opposition à "echoing", par exemple.

76
Manny D

Le nombre d’occurrences de chaînes (pas lignes) peut être obtenu en utilisant grep avec -o option et wc (nombre de mots):

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

Ainsi, la solution complète à votre problème ressemblerait à ceci:

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

Je prends quelques hypothèses ici, parce que je ne comprends pas bien ce que vous demandez.

Je pense que ce que vous voulez, c'est un compte du nombre de lignes sur lesquelles le motif 'echo' apparaît dans le fichier donné.

J'ai collé votre exemple de texte dans un fichier nommé 6741967.

Tout d'abord, grep trouve les correspondances:

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

Deuxièmement, utilisez wc -l compter les lignes

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

si vous voulez juste le nombre d’occurrences, alors vous pouvez le faire, $ grep -c "string_to_int" nom_fichier

0
beginner