Eternels problemes avec grep

Résolu
salut a tous,
j'ai une variable qui contient un texte sur plusieurs lignes :
$ echo "$mtpt"
/home/santiago/folder
/home/santiago/folder/file
/home/santiago/folder1
/var/home/santiago/folder/file

Je voudrais isoler tous les chemins sous /home/santiago/folder (inclus). Je veux donc extraire :
/home/santiago/folder
/home/santiago/folder/file

J'ai d'abord essaye :
$ echo "$mtpt" | grep '^/home/santiago/folder'
/home/santiago/folder
/home/santiago/folder/file
/home/santiago/folder1

La j'ai une ligne en trop. Mais si je fais :
$ echo "$mtpt" | grep '^/home/santiago/folder/'
/home/santiago/folder/file

Il me manque une ligne

Comment faire pour dire "soit un slash, soit la fin de la ligne"

Merci d'avance
Santiago

--

Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

6 réponses

  1. bravo iluvatar et jipicy,

    avec grep, c'est l'option -E que j'avais omis (et je viens de comprendre que c'est synonyme de egrep).

    donc au final, voila la syntaxe que j'ai retenu :
    echo "$mtpt" | grep -E '^/home/santiago/folder(/|$)'

    si ca vous interesse, j'ai poste mon script final afin qu'il soit teste par le plus grand nombre et que je puisse corriger le plus d'erreurs possible.

    1. Modérateur
      Salut,

      Pour ma part j'avais ceci avec "egrep" :
      echo "$mtpt" | egrep  "^/home/santiago/folder($|/.*)"
      ou
      grep -E  "^/home/santiago/folder($|/.*)"
      ;-))
      1. je pensais aussi comme dubcek, mais ça ne marche pas. En bidouillant un peu, je suis arrivé à cela en utilisant egrep plutôt que grep

        egrep '(/home/e)($|/)'
        1. la solution est
          $ echo "$mtpt" | grep -e '^/home/santiago/folder\(/.*\)*$'


          1. Contributeur
            hello
             echo "$mtpt" | grep '^/home/santiago/folder[ /$ ]'


            enlever les espaces entre les [