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

**URL:** <https://www.debian-fr.org/t/bash-faire-un-grep-dune-variable-a-partir-du-resultat-dune-autre-variable/80073>\
**Category:** Programmation\
**Created:** [Septembre 3, 2019, 9:29 UTC](https://www.debian-fr.org/t/bash-faire-un-grep-dune-variable-a-partir-du-resultat-dune-autre-variable/80073 "2019-09-03T21:29:13Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![guiguitarux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/guiguitarux/32/10039_2.png) [@guiguitarux](https://www.debian-fr.org/u/guiguitarux)\
**Post date:** [Septembre 3, 2019, 9:29 UTC](https://www.debian-fr.org/t/bash-faire-un-grep-dune-variable-a-partir-du-resultat-dune-autre-variable/80073/1 "2019-09-03T21:29:13Z")

</div>

Bonjour,

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

```nohighlight
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 🙄

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

---

<div class="post-metadata">

**Author:** ![Albert](https://www.debian-fr.org/user_avatar/www.debian-fr.org/albert/32/8474_2.png) [@Albert](https://www.debian-fr.org/u/Albert)\
**Post date:** [Septembre 3, 2019, 9:43 UTC](https://www.debian-fr.org/t/bash-faire-un-grep-dune-variable-a-partir-du-resultat-dune-autre-variable/80073/2 "2019-09-03T21:43:00Z")

</div>

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

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

```

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 3, 2019, 11:39 UTC](https://www.debian-fr.org/t/bash-faire-un-grep-dune-variable-a-partir-du-resultat-dune-autre-variable/80073/3 "2019-09-03T23:39:17Z")

</div>

> [@guiguitarux](#):
>
> …  
> Vous voyez clairement ce que je tente de faire ?  
> …

Pas du tout,

> [@guiguitarux](#):
>
> …pas moyen d’arriver à faire ce que je veux…

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

> [@guiguitarux](#):
>
> …Il semble qu’il y ait des issues à l’aide de awk mais je n’ai pas réussi non plus.

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

---

<div class="post-metadata">

**Author:** ![guiguitarux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/guiguitarux/32/10039_2.png) [@guiguitarux](https://www.debian-fr.org/u/guiguitarux)\
**Post date:** [Septembre 4, 2019, 5:53 UTC](https://www.debian-fr.org/t/bash-faire-un-grep-dune-variable-a-partir-du-resultat-dune-autre-variable/80073/4 "2019-09-04T05:53:37Z")

</div>

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 «&nbsp;je suis un boulet&nbsp;» 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 «&nbsp;un&nbsp;» 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_

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Septembre 4, 2019, 8:09 UTC](https://www.debian-fr.org/t/bash-faire-un-grep-dune-variable-a-partir-du-resultat-dune-autre-variable/80073/5 "2019-09-04T08:09:58Z")

</div>

> [@Albert](#):
>
> J’écrirais plutôt comme ça :
> 
> ```auto
> var1="je suis un boulet"
> texte="un"
> var2=echo $var1 | $(grep $texte)
> echo $var2
> 
> ```

Moi comme ça:

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

```

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Septembre 4, 2019, 10:54 UTC](https://www.debian-fr.org/t/bash-faire-un-grep-dune-variable-a-partir-du-resultat-dune-autre-variable/80073/6 "2019-09-04T10:54:12Z")

</div>

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.

> [@guiguitarux](#):
>
> Il faut imaginer que je traite une liste de phrases

Dans un fichier, tu le parcours comment ce fichier ?

> [@guiguitarux](#):
>
> et que le contenu de var1 est la phrase déjà sélectionnée comme suit :

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 ?

---

<div class="post-metadata">

**Author:** ![guiguitarux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/guiguitarux/32/10039_2.png) [@guiguitarux](https://www.debian-fr.org/u/guiguitarux)\
**Post date:** [Septembre 4, 2019, 11:10 UTC](https://www.debian-fr.org/t/bash-faire-un-grep-dune-variable-a-partir-du-resultat-dune-autre-variable/80073/7 "2019-09-04T11:10:04Z")

</div>

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 🤬

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 :

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

```

retour fournit par la console :

```nohighlight
$./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)

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 4, 2019, 11:52 UTC](https://www.debian-fr.org/t/bash-faire-un-grep-dune-variable-a-partir-du-resultat-dune-autre-variable/80073/9 "2019-09-04T11:52:20Z")

</div>

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

S’il s’agit d’un script bash, le [shebang](https://fr.wikipedia.org/wiki/Shebang) devrait être :  
`#!/bin/bash`

* * *

Voici le script corrigé :

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

```

---

<div class="post-metadata">

**Author:** ![guiguitarux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/guiguitarux/32/10039_2.png) [@guiguitarux](https://www.debian-fr.org/u/guiguitarux)\
**Post date:** [Septembre 4, 2019, 12:16 UTC](https://www.debian-fr.org/t/bash-faire-un-grep-dune-variable-a-partir-du-resultat-dune-autre-variable/80073/10 "2019-09-04T12:16:14Z")

</div>

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