Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications
Applications Questions sur l'utilisation d'applications, du shell, et des interfaces graphiques (KDE, Gnome, XFCE... )
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/12/2011, 17h21   #1
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 92
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 92
Points : 38
Points : 38
Par défaut grep encore plus fin?

rebonjour,

J'ai encore une question. Promis après j'arrête.
J'utilise grep en ce moment.
Il me permet de selectionner des lignes dont la n-ieme suivante contient un motif (mettons toto).
Ex : mon fichier:
Code :
1
2
3
junk...tata...junk
junk...titi...junk
junk...toto...junk
Code :
 cat monfichier | grep -B 2 toto
me renvoie junk...tata...junk.
Plutôt sympa.

Mais je n'ai pas de resultat assez fin avec ça.
Il me faudrait par exemple, selectionner les lignes pour lesquelles la suivante contient titi et la "2eme suivante" contient toto.
Bien sûr la commande
Code :
grep -B 1 titi -B 2 toto
ne passe pas

Si vous avez une commande magique, quelque soit le langage...

Merci pour votre attention et votre aide
maxhazard est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2011, 17h25   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Code :
1
2
grep -B1 'titi
toto' nomFichier

?
/!\ uuoc
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2011, 17h46   #3
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 92
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 92
Points : 38
Points : 38
salut,

En fait j'ai pas assez specifié le format du fichier. ( Je viens de reéditer mon premier post )
Les lignes ne contiennent pas que "titi" ou "toto".

Je pensais à appliquer les deux commandes separemment et comparer les resultats mais c'est tout un programme
maxhazard est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2011, 18h24   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Code :
grep -B2 'toto' fichier | grep -B1 'titi'
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2011, 18h41   #5
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 92
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 92
Points : 38
Points : 38
Ca ne passe pas. La première commande grep selectionne toutes les lignes dont la "2eme suivante" contient toto. Donc le retour ne contient pas titi a priori mais seulement tata (et bien d'autres). Le 2eme grep ne voit pas de titi et donc il ne renvoie rien.

Je peux le faire en 2 commandes je pense avec ton idée:
grep -B 1 toto | grep titi
recuperer la ligne L de titi puis
grep -B 1 L monfichier
maxhazard est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2011, 18h46   #6
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Et avec "sed" ?
Code :
sed -n 'N;N;/titi.*toto/p' fichier
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2011, 19h31   #7
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 92
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 92
Points : 38
Points : 38
C'est presque ça oui. Le truc c'est que cette commande donne les lignes de
-titi
-toto
-la suivante de toto

Il me faudrait la précédente de titi.
maxhazard est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2011, 19h38   #8
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 92
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 92
Points : 38
Points : 38
sinon dans l'idée de n_Bah:
Code :
grep '(* sans \n)tata(* sans \n)\n(* sans \n)titi(* sans \n)\n(* sans \n)toto(* sans \n)'
?
maxhazard est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2011, 19h45   #9
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par maxhazard Voir le message
C'est presque ça oui. Le truc c'est que cette commande donne les lignes de
-titi
-toto
-la suivante de toto

Il me faudrait la précédente de titi.
Ben chez moi elle marche bien :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ cat bar 
junk...tata...junk
junk...titi...junk
junk...toto...junk
junk...tata...junk
junk...tuti...junk
junk...toto...junk
junk...tyty...junk
junk...titi...junk
junk...toto...junk
junk...tata...junk
junk...titi...junk
junk...totu...junk
 
$ sed -n 'N;N;/titi.*toto/p' bar 
junk...tata...junk
junk...titi...junk
junk...toto...junk
junk...tyty...junk
junk...titi...junk
junk...toto...junk
 
$
Mais bon, comme on n'a pas les bonnes données, forcément
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2011, 21h45   #10
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 92
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 92
Points : 38
Points : 38
Pas compris pourquoi ca ne fonctionne pas chez moi mais en ajoutant un N:
Code :
sed -n 'N;N;N;/titi.*toto/p'
J'ai les 3 lignes que je veux ;p.


tata
titi
toto
toto2

maxhazard est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h55.


 
 
 
 
Partenaires

Hébergement Web