Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/03/2018, à 15:54

Brice Jeunieaux

[Résolu] Commande 'grep' : récupérer 2 parties d'une ligne de texte

Bonjour / bonsoir,

m'initiant à la commande 'grep', formidable outil pour la simulation de base de données locales, je rencontre un petit pic. hmm


En effet, voici ma "base de données" :

[brice@brice-Lenovo-G505] [~/.../grep] $
cat dataLaby.txt

CATG---ID---LIB---NO.LOT---ETAT

3-1-Lettre-1-0
3-2-Sac-1-1
3-3-Couteau-1-0
3-5-Lanterne-1-2
3-1-Lettre-2-1
3-2-Sac-2-3

catg3--id1--lib"Lettre"----no1--etat0
catg3--id2--lib"Sac"-------no1--etat1
catg3--id3--lib"Couteau"---no1--etat0
catg3--id5--lib"Lanterne"--no1--etat2
catg3--id1--lib"Lettre"----no2--etat1
catg3--id2--lib"Sac"-------no2--etat3

[brice@brice-Lenovo-G505] [~/.../grep] $

Ici l'on ne s'intéressera qu'à la partie plus textuelle, puisque je saurais adapter le code à la première partie une fois mon problème résolu.


Le but ici est de récupérer les lignes contenant "id1" et contenant également "etat1" à la fin (donc, récupérer uniquement l'avant dernière ligne).
J'ai essayé de faire cela avec la commande suivante, ce qui me donne bien entendu (et j'ai très bien compris pourquoi depuis) :

[brice@brice-Lenovo-G505] [~/.../grep] $
grep -iG 'id[1]' dataLaby.txt && grep -iG 'etat[1]$' dataLaby.txt

catg3--id1--lib"Lettre"----no1--etat0
catg3--id1--lib"Lettre"----no2--etat1
catg3--id2--lib"Sac"-------no1--etat1
catg3--id1--lib"Lettre"----no2--etat1

[brice@brice-Lenovo-G505] [~/.../grep] $

Du coup, j'avais essayé de taper cela, mais comme vous pouvez le voir et vous en douter, ce n'est pas cette syntaxe qu'il faut adopter hmm :

[brice@brice-Lenovo-G505] [~/.../grep] $
grep -iG [ 'id[1]' && 'etat1$' ]  dataLaby.txt
grep: Expression régulière invalide

[brice@brice-Lenovo-G505] [~/.../grep] $

D'où ma question : quelle serait là syntaxe correcte à adopter (en utilisant les opérateurs logiques ou autre méthode si impossible de faire avec les opérateurs logiques) ?

Merci beaucoup pour votre aide. smile

Dernière modification par Brice Jeunieaux (Le 02/03/2018, à 16:04)

Hors ligne

#2 Le 02/03/2018, à 15:59

pingouinux

Re : [Résolu] Commande 'grep' : récupérer 2 parties d'une ligne de texte

Bonjour,
Tu te compliques la vie…

grep 'id1.*etat1' dataLaby.txt

Édité :
Et si tu veux que etat1 soit à la fin de la ligne

grep 'id1.*etat1$' dataLaby.txt

Édité (2) :
Pour info, en enchaînant les grep, il aurait fallu faire

grep 'id1' dataLaby.txt | grep 'etat1$'

mais c'est plus compliqué et moins logique.

Dernière modification par pingouinux (Le 02/03/2018, à 16:07)

Hors ligne

#3 Le 02/03/2018, à 16:03

Brice Jeunieaux

Re : [Résolu] Commande 'grep' : récupérer 2 parties d'une ligne de texte

pingouinux a écrit :

Bonjour,
Tu te compliques la vie…

grep 'id1.*etat1' dataLaby.txt

Je ne connaissais pas cette syntaxe...
Du travail rapide, précis, et efficace, merci beaucoup ! big_smile

Sujet résolu, au suivant ! wink


EDIT : oui, pour le '$' et le '^', je connais déjà (et j'ai remarqué qu'on pouvais sélectionner plus de deux éléments avec ta solution).

Dernière modification par Brice Jeunieaux (Le 02/03/2018, à 16:06)

Hors ligne