BASH : faire un grep d'une variable à partir du résultat d'une autre variable ?


#1

Bonjour,

BASH et moi on est pas super pote… Même des trucs simple j’ai parfois du mal; Voilà mon problème :

var1="je suis un boulet"
texte="un"
var2=echo "$var1" | grep $texte
echo $var2

Vous voyez clairement ce que je tente de faire ?
Depuis deux jours, j’ai épluché des dizaines d’exemples sur le net, les plus effrayants les uns que les autres, pas moyen d’arriver à faire ce que je veux, d’où mon post… Help :roll_eyes:

Il semble qu’il y ait des issues à l’aide de awk mais je n’ai pas réussi non plus.


#2

Bonjour,
J’ai à peu près le même niveau que toi !
J’écrirais plutôt comme ça :

var1="je suis un boulet"
texte="un"
var2=echo $var1 | $(grep $texte)
echo $var2

#3

Pas du tout,

il est impossible en lisant vos messages de deviner le résultat que vous avez tenté d’obtenir.

Là non plus, impossible de savoir ce qui a été tenté, dans quel but, et pourquoi ça n’a pas fonctionné.


#4

bonjour,

effectivement il manquait au moins un élément à mon exemple (si je puis dire dans l’énoncé).

Il faut imaginer que je traite une liste de phrases et que le contenu de var1 est la phrase déjà sélectionnée comme suit :

le bash c’est bien
seulement voilà comme beaucoup de languages, il demande beaucoup de rigueur
j’ai le problème suivant
je suis un boulet
mais je me console car
il y a pire que moi, ceux qui refusent de chercher

la variable $texte me permet de retrouver la phrase “je suis un boulet” via la ligne de commande que j’ai tenté de coder et qui est ici présentée dans var2 …
voilà, ensuite il faut que je puisse afficher son contenu avec $var2

Alors vous allez me dire : mais pourquoi tu ne fais pas simplement un grep “un” dans ton code et c’est fini !?
Ben parce que dans mon cas de figure réel, c’est comme ça que ça se présente


#5

Moi comme ça:

var1="je suis un boulet"
texte="un"
var2=$(echo $var1 | grep $texte)
echo $var2

#6

Je pense que malgré tout le but de la demande devrais être éclairci, nous restons avec si peux d’information sur des suppositions et sans doute des propositions pas forcèment les plus optimisés ou simplement adéquats.

Dans un fichier, tu le parcours comment ce fichier ?

Donc c’est une variable fixé dès le départ.

En gros tu cherche à parser un fichier à la recherche d’un string et sortir la ligne complète comportant une occurrence à ce string ?


#7

D’abord merci pour vos réponses.

Alors à force de constater que mon exemple semble ne poser de problème pour personne j’ai fini par me remettre en question et bingo : mon exemple n’était pas génial parce qu’avec vos réponses, effectivement ça fonctionne… …mais pas dans mon vrai script :face_with_symbols_over_mouth:

Dans mon vrai programme, en fait y a plus qu’un mot et là, j’ai bien une erreur qui apparaît; Donc en reprenant l’exemple ci-dessus, ajoutons un deuxième motif et là vous allez comprendre pourquoi je bute autant sur ce problème à la noix :

#!/bin/sh
var1="je suis gros gros boulet"
texte=" gros gros"
var2=$(echo $var1 | grep $texte)
echo $var2

retour fournit par la console :

$./test_boulet.sh
grep: gros: Aucun fichier ou dossier de ce type

cette fois, je retrouve bien l’erreur de toujours
(note pour clochette : parser je ne sais pas encore ce que cela veut dire, je me renseignerai)


#9

Entoure de guillemets les variables chaînes de caractères.

S’il s’agit d’un script bash, le shebang devrait être :
#!/bin/bash


Voici le script corrigé :

#!/bin/bash
var1="je suis gros gros boulet"
texte=" gros gros"
var2=$(echo "$var1" | grep "$texte")
echo "$var2"

#10

Bravo, cela résoud mon problème, merci beaucoup