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
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.
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
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
si vous voulez juste le nombre d’occurrences, alors vous pouvez le faire, $ grep -c "string_to_int" nom_fichier