Besoin d'aide en Bash
Utilisateur anonyme
-
asevere Messages postés 13521 Statut Webmaster -
asevere Messages postés 13521 Statut Webmaster -
si j'ai une variable x = (r1=1&r2=3&r3=4&r4=0&r5=5) par exemple, comment puis je faire pour retourner le nombre de `&` dans la phrase. J'ai essayer
egrep -c'&' $x
mais ca ne marche pas, je pense que c'est du au fait que x nèst pas un fichier
merci de votre aide, passez une bonne journee!
egrep -c'&' $x
mais ca ne marche pas, je pense que c'est du au fait que x nèst pas un fichier
merci de votre aide, passez une bonne journee!
A voir également:
- Besoin d'aide en Bash
- Bingo bash free - Télécharger - Divers Jeux
- Bash pause ✓ - Forum Shell
- Bash addition - Forum Programmation
- Bash permission non accordée - Forum Shell
- Bash list ✓ - Forum Shell
2 réponses
Une solution avec awk
(je n'ai pas tout vérifié, mais c'est une piste...)
x='(r1=1&r2=3&r3=4&r4=0&r5=5)'
echo $x | awk 'BEGIN{FS="&"}{print NF-1;}'
Johan
The software said "Requires Windows98, Win2000, or better,
So I installed Unix.
(je n'ai pas tout vérifié, mais c'est une piste...)
x='(r1=1&r2=3&r3=4&r4=0&r5=5)'
echo $x | awk 'BEGIN{FS="&"}{print NF-1;}'
Johan
The software said "Requires Windows98, Win2000, or better,
So I installed Unix.
Salut,
Le problème n'est pas que x soit une variable, rien ne t'empeche de faire
echo $x | grep...
Le probleme c'est que l'otption '-c ' renvoi le nombre de lignes ou le motif est trouvé.
Tu as plusieures solutions awk comme le disais Johan ou sed...
Pour une solution qui utilises les expressions réguliére, tu peux voir ça:
-sed 's/[^&]*//g' -> sed 's/1/2/g'
Sed va fair une substitution (s) en remplacant 1 par 2 de maniere globale (g) (ie: sans le 'g' tu ne substitue 2 à la premiere occurence de 1 uniquement).
ici 1= [^&]* c'est à dire n'importe quel caractére sauf '&'
et 2 bah c'est rien :o)
Cette commande équivaut donc à supprimer tout ce qui n'est pas '&' !
-tr -d'\n'
Sed a le défault de rajouter un retour chariot la ou il n'y en a pas... donc on efface tout les '\n' que l'on trouve dans le résultat de la commande précédante (tr=translate, -d pour delete)
-wc -m
ensuite on compte le nombre de caracteres renvoyés par le pipeline (ou text stream
)
wc compte '\n' comme un caractère d'ou l'interet de les surpprimer à l'étape d'avant pour ne pas avoir à soustraire.
Voilà, la commande de johan fonctionne correctement à prioris, et est plus simple à taper, mais ne compte pas rééllement le nombre de caractères '&' trouvé...
C'est juste une histoire de mots ;o)
@++
Le problème n'est pas que x soit une variable, rien ne t'empeche de faire
echo $x | grep...
Le probleme c'est que l'otption '-c ' renvoi le nombre de lignes ou le motif est trouvé.
Tu as plusieures solutions awk comme le disais Johan ou sed...
Pour une solution qui utilises les expressions réguliére, tu peux voir ça:
echo $x | sed 's/[^&]*//g' | tr -d '\n' | wc -m
-sed 's/[^&]*//g' -> sed 's/1/2/g'
Sed va fair une substitution (s) en remplacant 1 par 2 de maniere globale (g) (ie: sans le 'g' tu ne substitue 2 à la premiere occurence de 1 uniquement).
ici 1= [^&]* c'est à dire n'importe quel caractére sauf '&'
et 2 bah c'est rien :o)
Cette commande équivaut donc à supprimer tout ce qui n'est pas '&' !
-tr -d'\n'
Sed a le défault de rajouter un retour chariot la ou il n'y en a pas... donc on efface tout les '\n' que l'on trouve dans le résultat de la commande précédante (tr=translate, -d pour delete)
-wc -m
ensuite on compte le nombre de caracteres renvoyés par le pipeline (ou text stream
)
wc compte '\n' comme un caractère d'ou l'interet de les surpprimer à l'étape d'avant pour ne pas avoir à soustraire.
Voilà, la commande de johan fonctionne correctement à prioris, et est plus simple à taper, mais ne compte pas rééllement le nombre de caractères '&' trouvé...
C'est juste une histoire de mots ;o)
@++
"Si c'est stupide et que ça marche, alors ce n'est pas stupide"