#1 Le 02/03/2018, à 14: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.
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 :
[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.
Dernière modification par Brice Jeunieaux (Le 02/03/2018, à 15:04)
Hors ligne
#2 Le 02/03/2018, à 14: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, à 15:07)
Hors ligne
#3 Le 02/03/2018, à 15:03
- Brice Jeunieaux
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
Je ne connaissais pas cette syntaxe...
Du travail rapide, précis, et efficace, merci beaucoup !
Sujet résolu, au suivant !
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, à 15:06)
Hors ligne