Besoin d'aide en Bash
Fermé
Utilisateur anonyme
-
27 nov. 2003 à 21:16
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 - 28 nov. 2003 à 02:24
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 - 28 nov. 2003 à 02:24
A voir également:
- Besoin d'aide en Bash
- Bash permission non accordée - Forum Shell
- Bash écrire dans un fichier - Forum Shell
- Bingo bash free - Télécharger - Divers Jeux
- Bash path - Astuces et Solutions
- Bash: adduser : commande introuvable ✓ - Forum Debian
2 réponses
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
934
27 nov. 2003 à 23:29
27 nov. 2003 à 23:29
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.
asevere
Messages postés
13084
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
3 février 2022
426
28 nov. 2003 à 02:24
28 nov. 2003 à 02:24
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"