Filtrer une variable

Résolu
Mozer8888 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   -  
Mozer8888 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je crois comprendre que les filtres grep, sort, cut, sed ... opèrent seulement sur des fichiers??

Que faire si on veut filtrer une variable??
contrôler si dans une variable il y a un motif et retourner une reponse.
(je suis novice!!...)
Ex
varx="Boire bcp alcool nuit à la sante"

grep "alcool" $varx

ou

sed s/alcool/biere/g $varx

5 réponses

jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
echo $varx | grep "alcool"
0
Mozer8888 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   1
 
ok! merci!
0
Mozer8888 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   1
 
si on ne desire pas afficher le résultat.
juste metttre dans une variable
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

Ou aussi avec une redirection "<<<" :

$ echo "${vary}"
Boire bcp alcool nuit à la sante

$ echo "${varx}"
Boire
bcp
alcool
nuit
à
la
santé

$ grep 'alcool' <<<"${vary}"
Boire bcp alcool nuit à la sante

$ grep 'alcool' <<<"${varx}"
alcool

$ sed 's/alcool/bière/' <<<"${vary}"
Boire bcp bière nuit à la sante

$ sed 's/alcool/bière/' <<<"${varx}"
Boire
bcp
bière
nuit
à
la
santé

$

;-))
0
Mozer8888 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   1
 
je pas compris cette methode
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Au lieu de faire :

cat $variable | grep 'motif'


On envoie directement la variable grâce à la redirection "<<<" sans passer par un "pipe" ( | ).

grep 'motif' <<< $variable
0
Mozer8888 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   1
 
Mais il faut deja donner à grep la chaine de caractère qu'il doit traiter.

J'ai par exemple:

maVar1="Boire bcp alcool nuit à la sante"

et je veux mettre dans maVar2, maVar1 mais sans le mot "alcool" : donc

maVar2="Boire bcp nuit à la sante"

coment faire??

2eme cas

si je veux juste savoir si j'ai "alcool" dans maVar1. comment faire?
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
1er cas :

$ maVar1="Boire bcp alcool nuit à la sante" 

$ maVar2=$(sed 's/alcool //' <<< $maVar1)

$ echo $maVar2
Boire bcp nuit à la sante


2ème cas : On teste le code retour ($?). Si égal à zéro (0) c'est bon, sinon si égal à un (1) c'est pas bon

$ grep 'alcool' <<< $maVar1
Boire bcp alcool nuit à la sante

$ echo $?
0

$ grep 'biere' <<< $maVar1

$ echo $?
1

$
0
Mozer8888 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   1
 
Ok Man !! Merci!

C'est tres clair
Merci encore!
0
Utilisateur anonyme
 
salur,

en bash aussi
[[ $vary =~ (alcool) ]] && echo "${BASH_REMATCH[1]}"
0
Mozer8888 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   1
 
[wilson@wilsonHP mybin]$ var1="boire bcp alcool nuit a la sante"

[wilson@wilsonHP mybin]$ echo $var1 | grep "alcool"
boire bcp alcool nuit a la sante
[wilson@wilsonHP mybin]$ grep 'alcool' <<< $var1
boire bcp alcool nuit a la sante

mais var1 ne change pas
voici avec sed je peux le changer

[wilson@wilsonHP mybin]$ echo $var1 | sed s/"alcool "//g
boire bcp nuit a la sante

Mais comment mettre ce nouveau résultat dans une autre variable, ou meme dans la meme variable en ecrasant son ancien contenu

Aussi si je veux juste savoir dans un script bash, si cette variable contien le mot 'alcool' ou pas, qui declenchera une autre commande.

genre :

if [ ! echo $var1 | sed s/"alcool "//g -eq $var1]; (je sais qu'ici c'est mal écrit)
then
....
0
Mozer8888 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   1
 
Je suis entrain d'ecrire un petit script tout bete
mais il bloque je crois au niveau de la partie en gras en disant:
zz.sh: ligne41: -120 : commande introuvable
sur gedit je ne peux pas trouver les lignes des messages d'erreur.
pouvez vous jetter un coup d'oeil svp.


#! /bin/sh
# nom du fichier => zz.sh
showrep=0

echo "Vous voullez savoir à quel jour de la semaine correspond une date?"
PS3="Entrez le numéro de votre date choisie -> "

select ladate in "aujourd'hui" "Une date quelquonque" "Votre date d'anniverssaire" "Sortir du programme";

do
if [ -z "$ladate" ];
then
echo "Erreur: entrez un numéro coorespondant aux dates proposées svp." 1>&2


elif [ "$REPLY" -eq 1 ];

then
Kel="la date d'aujourd'hui"
dateChoi=$(date +%s)
dc=$(date "+%D")
showRep=1

elif [ "$REPLY" -eq 4 ];:

then
echo "Bye!"
break

else
Kel="Une date quelquonque"
if [ "$REPLY" -eq 3 ];
then
Kel="Votre date d'anniverssaire"
da="d'anniverssaire"
fi

echo "Vous désirez savoir à quel jour de la semaine correspond "$Kel
echo "Veuillez saisir l'année $da: "; read annee

Actualyear=$(date "+%Y")
PlageYear=let $[ActualYear - 120]
while [ $annee -gt $Actualyear ]|| [$annee -lt $PlageYear];
do
echo "Année $da saisie incorrecte. Ressayez: "
read annee
done

echo "Veuillez saisir le mois: "
read mois
while [ $mois -gt 12 ] || [ $mois -lt 1 ];
do
echo "Mois $da saisi incorrect. Ressayez: "
read mois
done

echo "Veuillez saisir le jour: "
read jour
while [ $jour -gt 31 ] || [ $jour -lt 1 ] || [ $jour -gt 29 ] && [ $jour -eq 2 ] || [ $jour -eq 30 ] && [ !$mois -eq 2 ];
do
echo "Jour $da saisi incorrect pour le mois $mois. Ressayez: "
read mois
done

dateChoi=$(date -d "$annee-$mois-$jour 0:0:0" +%s)
dc="$jour/$mois/$annee"
showRep=1


fi

if [ $showRep -eq 1 ];
then

echo "Le jour de la semaine coorespondant à $dc est: " $(date -d @$dateChoi "+%A")

fi
echo
done
0
Mozer8888 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   1
 
J'ai trouvé les erreurs
j'ai écris
PlageYear=let $[ActualYear - 120]
au lieu de
PlageYear=$[Actualyear - 120]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
PlageYear=let $[ActualYear - 120]
ça ce n'est pas correct.
PlageYear=$((ActualYear - 120))

et là
while [ $annee -gt $Actualyear ]|| [$annee -lt $PlageYear]; 
il manque un espace à gauche du ou (||).
tu devrais privilégier l'usage de 'case', ce serait plus clair.


ps: puisque tu changes de sujet, ouvre un nouveau sujet !
0
Mozer8888 Messages postés 76 Date d'inscription   Statut Membre Dernière intervention   1
 
merci
0