Faire une seule recherche de 2 types de chaine de caractère

Faire une seule recherche de 2 types de chaine de caractère - Shell/Batch - Programmation

Marsh Posté le 30-09-2006 à 11:49:45    

Voilà ce qu'il y'a comme problème:
 
J'ai 2 commandes pour faire des recherches de chaines de caractères:
 
 grep '^1;' nomFichier qui permet d'afficher les lignes de nomFichier qui commence par la chaîne 1;
 grep ';1;' nomFichier qui permet d'afficher les lignes de nomFichier qui contiennent la chaîne ;1;
 
Comment faire la même recherche en une seule commande?
 
 

Reply

Marsh Posté le 30-09-2006 à 11:49:45   

Reply

Marsh Posté le 30-09-2006 à 12:06:59    

marc90 a écrit :

Voilà ce qu'il y'a comme problème:
 
J'ai 2 commandes pour faire des recherches de chaines de caractères:
 
 grep '^1;' nomFichier qui permet d'afficher les lignes de nomFichier qui commencent par la chaîne 1;
 grep ';1;' nomFichier qui permet d'afficher les lignes de nomFichier qui contiennent la chaîne ;1;
 
Comment faire la même recherche en une seule commande?


grep ne te permet de faire qu'une seule recherche à la fois - Si vraiment tu ne veux qu'un seul grep, tu peux t'en sortir comme ça :
sed -e "s/^1/;1;/" nomFichier |grep ";1;"
 
Je ne comprends pas trop ton besoin de n'avoir qu'une seule commande. Si ton besoin réel est de n'avoir qu'une seule ligne (par exemple tu voudrais rediriger en une seule fois l'ensemble des deux recherches dans un fichier), tu peux utiliser les parenthèses pour grouper les 2 commandes
(grep "^1" nomFichier; grep ";1;" nomFichier) > result


Message édité par Sve@r le 30-09-2006 à 12:47:51

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 30-09-2006 à 12:36:35    

Le besoin de n'avoir qu'une seule commande est de ne pas séparer les lignes de résultats

Reply

Marsh Posté le 30-09-2006 à 12:44:20    

marc90 a écrit :

Le besoin de n'avoir qu'une seule commande est de ne pas séparer les lignes de résultats


Tu veux dire que si les lignes 1 et 3 contiennent "1 xxx" et que la ligne 2 contient "yyy;1;zzz", tu veux avoir comme résultat la ligne 1 suivie de la ligne 2 et de la ligne 3 et non la ligne 1 et la ligne 3 données par le 1er grep puis la ligne 2 donnée par le 2° grep ?
 
Si c'est ça faut oublier le grep trop limité et passer par du awk. Ou alors ma 1ère solution où je transforme toutes les chaînes de la 1ère recherche en chaines de la 2° puis je ne recherche que la 2°. Mais ça te donne un résultat où certaines lignes sont transformées et ne correspondent plus réellement aux lignes du fichier...


Message édité par Sve@r le 30-09-2006 à 12:47:12

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 30-09-2006 à 14:21:29    

Voilà c'est ça si la premiere ligne contient ^1; et la seconde ;1; et la 3eme comme la première, il faut afficher la premiere ligne, la seconde puis la troisième et non pas la premiere et la troisième puis la seconde. OK faut utiliser autre chose que grep, comme quoi on arrive vite aux limites des commandes.

Reply

Marsh Posté le 30-09-2006 à 14:25:22    

man grep && grep '\(^\|;\)1;' :o
 


Message édité par 0x90 le 30-09-2006 à 14:26:06
Reply

Marsh Posté le 30-09-2006 à 15:09:36    

Ha j'avais fait un truc du genre mais au lieu de mettre le \ devant les parenthèses je le mettait devant le point-virgule. Je suis sopulagé qu'on puisse faire ça avec GREP. Merci Ox90. Tu travailles dans les shell?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed