Disons que j'ai une variable
line="This is where we select from a table."
Maintenant, je veux dire combien de fois la phrase est sélectionnée.
grep -ci "select" $line
J'ai essayé ça, mais ça n'a pas marché. J'ai aussi essayé
grep -ci "select" "$line"
Cela ne fonctionne toujours pas. Je reçois l'erreur suivante.
grep: This is where we select from a table.: No such file or directory
...<<<"$line"
. La commandegrep
attend un fichier à la placeRéponses:
J'ai
grep
lu sur son entrée standard. Voilà, en utilisant une pipe ...... ou une chaîne ici ...
Aussi, vous voudrez peut-être remplacer les espaces par des nouvelles lignes avant grepping:
... ou vous pouvez demander
grep
d'imprimer le match uniquement:Cela vous permettra de vous débarrasser du reste de la ligne quand il y a correspondance.
Edit: Oups, lisez un peu trop vite, merci Marco . Pour compter les occurrences, il suffit d’en diriger l’une d’elles vers
wc(1)
;)Une autre édition faite après le commentaire de lzkata , citant
$line
lors de l’utilisationecho
.la source
wc
pour compléter la tâche:grep -o <string> <<< "$variable" | wc -l
echo "$line"
tr
Vous n'avez pas besoin d'appeler
grep
pour une chose aussi simple.Ou en fonction:
Il faut 2 ou 3 arguments. Fournir plus que cela faussera ses résultats. Vous pouvez l'utiliser comme:
... qui affiche le nombre d'occurrences
.
dans...
s'il se produit au moins 2 fois. Comme ça:Si
$_occur
est vide ouunset
lorsqu'il est appelé, cela n'affectera aucune variable shell etreturn
1 si"$2"
survient"$1"
moins de"$3"
fois. Ou, si elle est appelée avec seulement deux arguments, elle ne serareturn
1 que si elle"$2"
n’est pas insérée"$1"
. Sinon, il retourne 0.Et ainsi, dans sa forme la plus simple, vous pouvez faire:
... qui imprime ...
...mais...
... imprimera ...
Vous pouvez également l'écrire un peu différemment et omettre les guillemets
$2
dans l' instruction(*"$2"*)
and"${1#*"$2"}"
. Si vous faites cela, vous pouvez utiliser des globes de shell pour les correspondances commesh[io]te
pour le test de correspondance.la source
bash
etdash
/sh
(et probablement quelques autres).