Grep la ligne du dessus

Résolu
Stéphane70 -  
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je cherche le moyen de renvoyer dans un fichier ma recherche grep + la ligne qui se trouve juste au dessus.

Je suis sur AIX et je n'ai pas l'impression que j'ai l'option sur mon grep.

Auriez vous une solution à me proposer ?

Merci d'avance pour votre aide

Stéphane70


A voir également:

22 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

Donc tu n'as pas l'option "-B n" ?

grep -B 1 "motif"

4
Stéphane70
 
C'est tout à fait ça.

Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Une solution avec "sed" :

sed -n '/motif/{G;1!p;};h' fichier
0
Stéphane70
 
Merci pour ton aide. Le problème est que je veux aussi recuperer la ligne avec les motifs recherché.

Un exemple étant plus parlant qu'un grand discours, voici un exemple de fichier que je veux traiter :
156 truc machin bidule
machin truc 156A00 Si refus : Erreur inconnue
machin truc 156B00 ok
machin truc 156COO ok

157 machin bidule chose
machin chose 157A00 ok
machin chose 157B00 ok
machin chose 157C00


Donc je fais une recherche avec grep sur A00 et Erreur et ca me sort la ligne mais je voudrais aussi la ligne du dessus.

Mon script donne pour l'instant et avec pour resultat juste la recherche sur les motifs :
grep A00 Test|grep Erreur>>resultat


Merci pour ton aide
Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
$ cat plop
156 truc machin bidule
machin truc 156A00 Si refus : Erreur inconnue
machin truc 156B00 ok
machin truc 156COO ok

157 machin bidule chose
machin chose 157A00 ok
machin chose 157B00 ok
machin chose 157C00

$ sed -n '/A00.*Erreur/{H;1!g;p;};h' plop
156 truc machin bidule
machin truc 156A00 Si refus : Erreur inconnue

$

;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Stéphane70
 
Ah chose très bizarre.

La commande s'execute sans message d'erreur mais je n'ai pas de resultat.

Je viens d'aller verifier dans le fichier et pourtant il y a bien les lignes correspondantes.

Une idée ?

Et encore merci pour ton aide.

Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Sans rien voir ni savoir de plus, non ;-((

Affiche la sortie de :

cat -A ton_fichier
0
Stéphane70
 
Je te présente toutes mes excuses.

Je n'ai pas testé sur le bon fichier.

Ca fonctionne à merveille sur linux mais sur mon aix ca ne sort que la ligne en question.

Merci encore pour ton aide précieuse et ta sympathie.


Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Essaie de créer un fichier de commande comme suit et de l'appeler depuis la ligne de commande :

$ cat foo.sed
#n
/A00.*Erreur/ {
    H
    1 !g
    p
}
h

$ sed -f foo.sed plop
156 truc machin bidule
machin truc 156A00 Si refus : Erreur inconnue

;-\
0
Stéphane70
 
Ca ne change rien.

Néanmoins, je viens de voir précisement ce que cela me sort.

En fait, il donne la première ligne correspondante, il saute une ligne et donne les deux premierès correspondantes, il saute une ligne et donne les trois premières lignes correspondantes etc

Il me donne l'impression de boucler.

Amicalement

Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
0
Stéphane70
 
????????

Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Merci d'afficher la sortie de la commande demandée (les 1ères lignes au moins) ;-))
0
Stéphane70
 
Voici debut du fichier :
Depot                                                          Date   Heure    Resultat                       Taille        Duree Vx
====================================================================================================================================
101 @POINT A@                                                16/11/10 18:14 S0 Bonne execution                                  0 04
/usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V                              SI Refus : fichier inexistant                       0 04
/usr1/TELFIC/101C00.ZIP,\TELFIC\101C00.ZIP,,,V                              A* Non execute                                      0 04
/usr1/TELFIC/101H00.ZIP,\TELFIC\101H00.ZIP,,,V                              A* Non execute                                      0 04
/usr1/TELFIC/101F00.ZIP,\TELFIC\101F00.ZIP,,,V                              A* Non execute                                      0 04
-/usr1/TELFIC/101CC0.ZIP,\TELFIC\101CC0.ZIP,,,V                             A* Non execute                                      0 04
------------------------------------------------------------------------------------------------------------------------------------
102 @POINT B@                                                16/11/10 18:00 S0 Bonne execution                                  1 04
/usr1/TELFIC/102A00.ZIP,\TELFIC\102A00.ZIP,,,V                              S0 Bonne execution                         143      1 04
/usr1/TELFIC/102C00.ZIP,\TELFIC\102C00.ZIP,,,V                              S0 Bonne execution                         145      0 04
/usr1/TELFIC/102H00.ZIP,\TELFIC\102H00.ZIP,,,V                              S0 Bonne execution                         135      1 04
/usr1/TELFIC/102F00.ZIP,\TELFIC\102F00.ZIP,,,V                              S0 Bonne execution                         135      1 04
-/usr1/TELFIC/102CC0.ZIP,\TELFIC\102CC0.ZIP,,,V                             S0 Bonne execution                         722      1 04
------------------------------------------------------------------------------------------------------------------------------------
104 @POINT C@                                                16/11/10 18:00 S0 Bonne execution                                  0 04
/usr1/TELFIC/104A00.ZIP,\TELFIC\104A00.ZIP,,,V                              SI Refus : fichier inexistant              731      1 04
/usr1/TELFIC/104C00.ZIP,\TELFIC\104C00.ZIP,,,V                              S0 Bonne execution                        1767      1 04
/usr1/TELFIC/104H00.ZIP,\TELFIC\104H00.ZIP,,,V                              S0 Bonne execution                         135      0 04
/usr1/TELFIC/104F00.ZIP,\TELFIC\104F00.ZIP,,,V                              S0 Bonne execution                         135      1 04
-/usr1/TELFIC/104CC0.ZIP,\TELFIC\104CC0.ZIP,,,V                             S0 Bonne execution                        5740      1 04
------------------------------------------------------------------------------------------------------------------------------------
108 @POINT D@                                                16/11/10 18:00 S0 Bonne execution                                  0 04
/usr1/TELFIC/108A00.ZIP,/usr1/TELFIC/108A00.ZIP,,,V                         S0 Bonne execution                        7845      1 04
/usr1/TELFIC/108C00.ZIP,/usr1/TELFIC/108C00.ZIP,,,V                         S0 Bonne execution                        1235      1 04
/usr1/TELFIC/108H00.ZIP,/usr1/TELFIC/108H00.ZIP,,,V                         S0 Bonne execution                         184      0 04
/usr1/TELFIC/108F00.ZIP,/usr1/TELFIC/108F00.ZIP,,,V                         S0 Bonne execution                        7672      1 04
-/usr1/TELFIC/108CC0.ZIP,/usr1/TELFIC/108CC0.ZIP,,,V                        S0 Bonne execution                        2869      1 04
-/usr1/TELFIC/108FDL.ZIP,/usr1/TELFIC/108FDL.ZIP,,,V                        S0 Bonne execution                        5902      1 04
------------------------------------------------------------------------------------------------------------------------------------


La commande :
sed -n '/A00.*inexistant/{H;1!g;p;};h' fichier

me donne le resultat suivant :
/usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V                              SI Refus : fichier inexistant                       0 04

/usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V                              SI Refus : fichier inexistant                       0 04
/usr1/TELFIC/104A00.ZIP,\TELFIC\104A00.ZIP,,,V                              SI Refus : fichier inexistant              731      1 04


Alors que je souhaiterais le resultat :
101 @POINT A@                                                16/11/10 18:14 S0 Bonne execution                                  0 04
/usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V                              SI Refus : fichier inexistant                       0 04
104 @POINT C@                                                16/11/10 18:00 S0 Bonne execution                                  0 04
/usr1/TELFIC/104A00.ZIP,\TELFIC\104A00.ZIP,,,V                              SI Refus : fichier inexistant              731      1 04


Voili, Voilou

Encore merci
Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Tu peux essayer avec :

sed -n '/A00.* inexistant/{H;1!g;p;};h'

;-\
0
Stéphane70
 
Désolé, même resultat.

Ce qui est surprenant c'est que mon linux/ubuntu la commande fonctionne à merveille mais que du moment ou je suis l'aix, ca coince.

Merci encore pour ton aide

Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Donc je réitère ma demande :

cat -A fichier
0
Stéphane70
 
ok, le cat -A n'existe pas sous Aix.

Donc je te donne le resultat donné sous linux :
^M$
Depot                                                          Date   Heure    Resultat                       Taille        Duree Vx^M$
====================================================================================================================================^M$
101 @POINT A@                                                16/11/10 18:14 S0 Bonne execution                                  0 04^M$
/usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V                              SI Refus : fichier inexistant                       0 04^M$
/usr1/TELFIC/101C00.ZIP,\TELFIC\101C00.ZIP,,,V                              A* Non execute                                      0 04^M$
/usr1/TELFIC/101H00.ZIP,\TELFIC\101H00.ZIP,,,V                              A* Non execute                                      0 04^M$
/usr1/TELFIC/101F00.ZIP,\TELFIC\101F00.ZIP,,,V                              A* Non execute                                      0 04^M$
-/usr1/TELFIC/101CC0.ZIP,\TELFIC\101CC0.ZIP,,,V                             A* Non execute                                      0 04^M$
------------------------------------------------------------------------------------------------------------------------------------^M$
102 @POINT B@                                                16/11/10 18:00 S0 Bonne execution                                  1 04^M$
/usr1/TELFIC/102A00.ZIP,\TELFIC\102A00.ZIP,,,V                              S0 Bonne execution                         143      1 04^M$
/usr1/TELFIC/102C00.ZIP,\TELFIC\102C00.ZIP,,,V                              S0 Bonne execution                         145      0 04^M$
/usr1/TELFIC/102H00.ZIP,\TELFIC\102H00.ZIP,,,V                              S0 Bonne execution                         135      1 04^M$
/usr1/TELFIC/102F00.ZIP,\TELFIC\102F00.ZIP,,,V                              S0 Bonne execution                         135      1 04^M$
-/usr1/TELFIC/102CC0.ZIP,\TELFIC\102CC0.ZIP,,,V                             S0 Bonne execution                         722      1 04^M$
------------------------------------------------------------------------------------------------------------------------------------^M$
104 @POINT C@                                                16/11/10 18:00 S0 Bonne execution                                  0 04^M$
/usr1/TELFIC/104A00.ZIP,\TELFIC\104A00.ZIP,,,V                              SI Refus : fichier inexistant              731      1 04^M$
/usr1/TELFIC/104C00.ZIP,\TELFIC\104C00.ZIP,,,V                              S0 Bonne execution                        1767      1 04^M$
/usr1/TELFIC/104H00.ZIP,\TELFIC\104H00.ZIP,,,V                              S0 Bonne execution                         135      0 04^M$
/usr1/TELFIC/104F00.ZIP,\TELFIC\104F00.ZIP,,,V                              S0 Bonne execution                         135      1 04^M$
-/usr1/TELFIC/104CC0.ZIP,\TELFIC\104CC0.ZIP,,,V                             S0 Bonne execution                        5740      1 04^M$
------------------------------------------------------------------------------------------------------------------------------------^M$
108 @POINT D@                                                16/11/10 18:00 S0 Bonne execution                                  0 04^M$
/usr1/TELFIC/108A00.ZIP,/usr1/TELFIC/108A00.ZIP,,,V                         S0 Bonne execution                        7845      1 04^M$
/usr1/TELFIC/108C00.ZIP,/usr1/TELFIC/108C00.ZIP,,,V                         S0 Bonne execution                        1235      1 04^M$
/usr1/TELFIC/108H00.ZIP,/usr1/TELFIC/108H00.ZIP,,,V                         S0 Bonne execution                         184      0 04^M$
/usr1/TELFIC/108F00.ZIP,/usr1/TELFIC/108F00.ZIP,,,V                         S0 Bonne execution                        7672      1 04^M$
-/usr1/TELFIC/108CC0.ZIP,/usr1/TELFIC/108CC0.ZIP,,,V                        S0 Bonne execution                        2869      1 04^M$
-/usr1/TELFIC/108FDL.ZIP,/usr1/TELFIC/108FDL.ZIP,,,V                        S0 Bonne execution                        5902      1 04^M$
------------------------------------------------------------------------------------------------------------------------------------^M$
$


Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
^M$
Voilà le coupable ;-((
Des retours chariots à la WIndows ;-((

Ça m'étonne même que ça marche sous Ubuntu ;-\

Il faut convertir ton fichier sous AIX au format Unix. Soit avec dos2unix (si installé) soit avec "sed", voir la fiche : https://forums.commentcamarche.net/forum/affich-37620064-sed-conversion-retours-chariots-dos-crlf-unix-lf

Sinon essaye ça (sur AIX) :

sed -n 'N;/.*\r\n.*A00.*inexistant/p'  fichier
0
Stéphane70
 
Non, je pense que les retours chariots sont dû au transfert en ftp de mon aix a mon linux.

Néanmoins, je vais jeter un oeil mais il me semble avoir déjà eu ce type de problème avec les transferts ftp.

Sinon la commande :
sed -n 'N;/.*\r\n.*A00.*inexistant/p'  fichier
ne renvoi rien, même pas les lignes d'avant.

Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
A tout hasard, essaye sous AIX :

sed -n l fichier

C'est un ELLE minuscule ;-))
0
Stéphane70
 
Ca donne ceci :
101 @POINT A@                                                16/11/10 1\
8:14 S0 Bonne execution                                  0 04\r$
/usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V                         \
     SI Refus : fichier inexistant                       0 04\r$
/usr1/TELFIC/101C00.ZIP,\TELFIC\101C00.ZIP,,,V                         \
     A* Non execute                                      0 04\r$
/usr1/TELFIC/101H00.ZIP,\TELFIC\101H00.ZIP,,,V                         \
     A* Non execute                                      0 04\r$
/usr1/TELFIC/101F00.ZIP,\TELFIC\101F00.ZIP,,,V                         \
     A* Non execute                                      0 04\r$
-/usr1/TELFIC/101CC0.ZIP,\TELFIC\101CC0.ZIP,,,V                        \
     A* Non execute                                      0 04\r$
-----------------------------------------------------------------------\
-------------------------------------------------------------\r$
102 @POINT B@                                                16/11/10 1\
8:00 S0 Bonne execution                                  1 04\r$
/usr1/TELFIC/102A00.ZIP,\TELFIC\102A00.ZIP,,,V                         \
     S0 Bonne execution                         143      1 04\r$
/usr1/TELFIC/102C00.ZIP,\TELFIC\102C00.ZIP,,,V                         \
     S0 Bonne execution                         145      0 04\r$
/usr1/TELFIC/102H00.ZIP,\TELFIC\102H00.ZIP,,,V                         \
     S0 Bonne execution                         135      1 04\r$
/usr1/TELFIC/102F00.ZIP,\TELFIC\102F00.ZIP,,,V                         \
     S0 Bonne execution                         135      1 04\r$
-/usr1/TELFIC/102CC0.ZIP,\TELFIC\102CC0.ZIP,,,V                        \
     S0 Bonne execution                         722      1 04\r$
-----------------------------------------------------------------------\
-------------------------------------------------------------\r$
104 @POINT C@                                                16/11/10 1\
8:00 S0 Bonne execution                                  0 04\r$
/usr1/TELFIC/104A00.ZIP,\TELFIC\104A00.ZIP,,,V                         \
     SI Refus : fichier inexistant              731      1 04\r$
/usr1/TELFIC/104C00.ZIP,\TELFIC\104C00.ZIP,,,V                         \
     S0 Bonne execution                        1767      1 04\r$
/usr1/TELFIC/104H00.ZIP,\TELFIC\104H00.ZIP,,,V                         \
     S0 Bonne execution                         135      0 04\r$
/usr1/TELFIC/104F00.ZIP,\TELFIC\104F00.ZIP,,,V                         \
     S0 Bonne execution                         135      1 04\r$
-/usr1/TELFIC/104CC0.ZIP,\TELFIC\104CC0.ZIP,,,V                        \
     S0 Bonne execution                        5740      1 04\r$
-----------------------------------------------------------------------\
-------------------------------------------------------------\r$
108 @POINT D@                                                16/11/10 1\
8:00 S0 Bonne execution                                  0 04\r$
/usr1/TELFIC/108A00.ZIP,/usr1/TELFIC/108A00.ZIP,,,V                    \
     S0 Bonne execution                        7845      1 04\r$
/usr1/TELFIC/108C00.ZIP,/usr1/TELFIC/108C00.ZIP,,,V                    \
     S0 Bonne execution                        1235      1 04\r$
/usr1/TELFIC/108H00.ZIP,/usr1/TELFIC/108H00.ZIP,,,V                    \
     S0 Bonne execution                         184      0 04\r$
/usr1/TELFIC/108F00.ZIP,/usr1/TELFIC/108F00.ZIP,,,V                    \
     S0 Bonne execution                        7672      1 04\r$
-/usr1/TELFIC/108CC0.ZIP,/usr1/TELFIC/108CC0.ZIP,,,V                   \
     S0 Bonne execution                        2869      1 04\r$
-/usr1/TELFIC/108FDL.ZIP,/usr1/TELFIC/108FDL.ZIP,,,V                   \
     S0 Bonne execution                        5902      1 04\r$


Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Il y a bien des retours chariots (\r$) ;-((

Essayons un truc comme ça :

sed 'N;s/\r\n/|/' fichier | grep inexistant
0
Stéphane70
 
Désolé,
sed : 0602-404 Function N;s/\r\n/\/ cannot be parsed


Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Essayons :

sed 'N;s/^M|/' fichier | grep inexistant

Le caractère "\r" (retour chariot) est représenté symboliquement par "^M", qui s'obtient par la séquence de touches suivante "CTRL-V" + "CTRL-M".
0
Stéphane70
 
Désolé, vraiment désolé :
sed : 0602-404 Function N;s/^M|/ cannot be parsed


Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Oups désolé y'a eu un bug d'affichage dans l'expression précédente (il manquait un slash) ;-((

sed 'N;s/^M/|/' fichier | grep inexistant
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Peux-tu me mettre ton fichier (ou un bout) sur Cijoint, histoire que je regarde de plus près si ça vient du fichier ou du système ?
0
Stéphane70
 
La commande me renvoi effectivement toutes les lignes ou le mot inexistant apparait.

Par contre pas la la ligne du dessus et sans prendre en compte le "A00".

Je t'ai déposé le fichier : http://www.cijoint.fr/cjlink.php?file=cj201011/cijHiGcuuC.txt

Merci encore pour ton aide

Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Ok, et comme ça :

sed 'N;s/^M\n/|/' fichier.txt | grep inexistant

Y'a du mieux ? Du style les 2 lignes à la suite...
0
Stéphane70
 
Non désolé, idem à la commande précédente.

Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Y'a un truc qui m'échappe là ;-(((

Allez encore une tentative :

sed -n 'N;/inexistant/s/^M/|/p' fichier
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Et tout simplement :

sed -n 'N;/inexistant/p' fichier
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Je continue au cas ou...

Est-ce que :

sed -n '/@DEPOT/p' fichier

Retourne les lignes avec "DEPOT" ?
Si oui, essayes :

sed -n '/@DEPOT/N;/inexistant/p' fichier
0
Stéphane70
 
Bonjour,

Je suis désolé mais tout a raté.

La première commande ne renvoi rien.
La deuxième commande renvoie les lignes avec inexistant mais pas la ligne du dessus.
Et les deux autres commandes ne renvoies rien également.

C'est à s'arracher les cheveux.

En tout cas merci pour ton aide précieuse.

Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Donc :

sed -n '/@DEPOT/p'

Ne renvoie rien, c'est ça ?

As-tu "unix2dos" et "dos2unix" comme commandes sur ton système ?
0
Stéphane70
 
c'est bien ça.

Non, je n'ai ni l'un ni l'autre

Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Ok. Et ça, ça renvoie quelque chose ?

 sed -n '/^[0-9][0-9]*/p' fichier
0
Stéphane70
 
Ca fonctionne dans le sens ou cela m'affiche toutes les lignes commençant par un chiffre.

Amicalement
Stéphane70
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Good. On enchaine donc :

 sed -n '/^[0-9][0-9]*/{N;p;}' fichier
0