Faire une seule recherche de 2 types de chaine de caractère - Shell/Batch - Programmation
Marsh Posté le 30-09-2006 à 12:06:59
marc90 a écrit : Voilà ce qu'il y'a comme problème: |
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
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
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...
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.
Marsh Posté le 30-09-2006 à 14:25:22
man grep && grep '\(^\|;\)1;'
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?
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?