Recherche de pattern en SED
Résolu
Bonjour,
Je suis en train de chercher un moyen de faire une recherche dans une log, et d'afficher les résultats sur un AIX 5.3
Ma log est de la forme suivante:
Elle contient des lignes du genre
05-DEC-2011 06:03:26 * (CONNECT_DATA=(SID=dbupqa10)(CID=(PROGRAM=D:\Opt\Oracle\Dev608\BIN\ifrun60.EXE)(HOST=blablabla)(USER=Anon000))) * (ADDRESS=(PROTOCOL=tcp)(HOST=x.x.x.x)(PORT=1839)) * establish * dblabla10 * 0
Je cherche une commande qui me permet de me lister tous les Users (en gras ci-dessus).
Je pense qu'avec un sed, cela est possible.
En gros, je voudrais faire: 'commande_magique monfichier' et cela me renvoie:
USER=Anon000
Pouvez vous m'aider ?
Je vous remercie d'avance.
Gunther
Je suis en train de chercher un moyen de faire une recherche dans une log, et d'afficher les résultats sur un AIX 5.3
Ma log est de la forme suivante:
Elle contient des lignes du genre
05-DEC-2011 06:03:26 * (CONNECT_DATA=(SID=dbupqa10)(CID=(PROGRAM=D:\Opt\Oracle\Dev608\BIN\ifrun60.EXE)(HOST=blablabla)(USER=Anon000))) * (ADDRESS=(PROTOCOL=tcp)(HOST=x.x.x.x)(PORT=1839)) * establish * dblabla10 * 0
Je cherche une commande qui me permet de me lister tous les Users (en gras ci-dessus).
Je pense qu'avec un sed, cela est possible.
En gros, je voudrais faire: 'commande_magique monfichier' et cela me renvoie:
USER=Anon000
Pouvez vous m'aider ?
Je vous remercie d'avance.
Gunther
A voir également:
- Recherche de pattern en SED
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Recherche photo - Guide
- Je recherche une chanson - Guide
- Fréquence tnt recherche manuelle - Forum TNT / Satellite / Réception
1 réponse
(mando@aldur) (~) $ cat toto.txt 05-DEC-2011 06:03:26 * (CONNECT_DATA=(SID=dbupqa10)(CID=(PROGRAM=D:\Opt\Oracle\Dev608\BIN\ifrun60.EXE)(HOST=blablabla)(USER=Anon000))) * (ADDRESS=(PROTOCOL=tcp)(HOST=x.x.x.x)(PORT=1839)) * establish * dblabla10 * 0 05-DEC-2011 06:03:26 * (CONNECT_DATA=(SID=dbupqa10)(CID=(PROGRAM=D:\Opt\Oracle\Dev608\BIN\ifrun60.EXE)(HOST=blablabla)(USER=Anon000))) * (ADDRESS=(PROTOCOL=tcp)(HOST=x.x.x.x)(PORT=1839)) * establish * dblabla10 * 0 (mando@aldur) (~) $ sed -e 's/.*\((USER=[^)]*)\).*/\1/' toto.txt (USER=Anon000) (USER=Anon000)
Petite explication en lisant de gauche à droite le motif passé à sed :
- s/CHAINE/REMPL/ : on va substituer les lignes qui respectent le motif CHAINE par un motif décrit dans REMPL.
Regardons maintenant ce qui est dans CHAINE :
- \.* : n'importe quelle suite de caractère
- \( : début du premier morceau, référencé \1 dans REMPL
- (USER= : la suite de caractère (USER=
- [^)] : n'importe quel caractère autre que ')'
- [^)]* : n'importe quel caractère autre que ')' répété entre 0 et une infinité de fois
- ) ; le caractère )
- \) fin du premier morceau (référencé par \1 dans REMPL)
Maintenant passons à REMPL :
- \1 : on réécrit simplement le morceau extrait (sans rien ajouter ni à gauche ni a droite. Par exemple on aurait pu écrire >>>\1<<< pour écrire >>>Anon0<<<<.
Bonne chance