Grep sous solaris
Résolu/Fermé
jv_b
Messages postés
4
Date d'inscription
mardi 21 août 2007
Statut
Membre
Dernière intervention
27 septembre 2007
-
27 sept. 2007 à 11:01
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 27 sept. 2007 à 14:59
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 27 sept. 2007 à 14:59
3 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
27 sept. 2007 à 13:13
27 sept. 2007 à 13:13
Salut,
Il semblerait que sous Solaris la commande "grep" ait une option "-b" (voir man grep).
En attendant voici un petit script faisant appel à "sed", modifié par rapport à https://www.grymoire.com/Unix/Scripts/grep4.sh qui devrait faire l'affaire. Peut être faudra-t-il y apporter des ajustements, notamment au niveau du dernier échange entre les mémoires tampons, en fonction des fichiers "parsés" et du résultat en sortie qui risque de ne pas être parfait, n'ayant pas tous les paramètres sous la main pour tester au mieux...
Il semblerait que sous Solaris la commande "grep" ait une option "-b" (voir man grep).
En attendant voici un petit script faisant appel à "sed", modifié par rapport à https://www.grymoire.com/Unix/Scripts/grep4.sh qui devrait faire l'affaire. Peut être faudra-t-il y apporter des ajustements, notamment au niveau du dernier échange entre les mémoires tampons, en fonction des fichiers "parsés" et du résultat en sortie qui risque de ne pas être parfait, n'ayant pas tous les paramètres sous la main pour tester au mieux...
#!/bin/sh # Émulation de grep -A3 -B5 "motif" fichier # Largement inspiré du script grep4.sh # sur le site : https://www.grymoire.com/Unix/Sed.html#uh-56 case $# in 1);; *) echo "Usage: $0 \motif\" < fichier";exit;; esac; sed -n ' '/$1/' !{ # Motif non satisfait - ajouter la ligne dans la mémoire annexe H # Remettez-le dans la mémoire principale (espace de travail) x # Ne conserver que 3 lignes dans le tampon # 2 lignes correspondent à .*\n.* # 3 lignes à .*\n.*\n.* # On efface les lignes exédentaires s/^.*\n\(.*\n.*\n.*\)$/\1/ # Mettre les 3 lignes (au plus) dans la mémoire annexe à nouveau x } '/$1/' { # Le motif est satisfait - Ajouter le contenu de la mémoire principale # à la mémoire secondaire H # Prendre la ligne suivante (n) et ajouter les 4 autres (N) n;N;N;N;N # Ajouter le tout à la mémoire annexe H # Échanger le tout avec la mémoire principale x # Afficher les lignes p }'
jv_b
Messages postés
4
Date d'inscription
mardi 21 août 2007
Statut
Membre
Dernière intervention
27 septembre 2007
27 sept. 2007 à 14:39
27 sept. 2007 à 14:39
MERKI...
ça marche nickel :
le petit condensé sans les explications car je désire également utiliser la commande online.
sed -n ''/ERROR/' !{H;x;s/^.*\n\(.*\n.*\)$/\1/;x;}
'/ERROR/' {H;n;N;N;N;N;N;N;H;x;p;}' rman****.log
En revanche, si quelqu'un sait comment faire pour ne pas être obligé de garder le passage à la ligne ...
sed -n ''/ERROR/' !{H;x;s/^.*\n\(.*\n.*\)$/\1/;x;} '/ERROR/' {H;n;N;N;N;N;N;N;H;x;p;}' rman****.log
Quand je teste cette commande, je reste bloqué (enfin, le process... pas moi).
Bon déjà, c'est nickel. Je ne suis plus obligé de me palucher les 300 000 lignes pour trouver mes erreurs.
Merci beaucoup jipicy
ça marche nickel :
le petit condensé sans les explications car je désire également utiliser la commande online.
sed -n ''/ERROR/' !{H;x;s/^.*\n\(.*\n.*\)$/\1/;x;}
'/ERROR/' {H;n;N;N;N;N;N;N;H;x;p;}' rman****.log
En revanche, si quelqu'un sait comment faire pour ne pas être obligé de garder le passage à la ligne ...
sed -n ''/ERROR/' !{H;x;s/^.*\n\(.*\n.*\)$/\1/;x;} '/ERROR/' {H;n;N;N;N;N;N;N;H;x;p;}' rman****.log
Quand je teste cette commande, je reste bloqué (enfin, le process... pas moi).
Bon déjà, c'est nickel. Je ne suis plus obligé de me palucher les 300 000 lignes pour trouver mes erreurs.
Merci beaucoup jipicy
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
27 sept. 2007 à 14:59
27 sept. 2007 à 14:59
Les quotes ne sont plus nécessaires autour du motif (elles n'étaient là que par rapport à la variable "$1"). J'ai juste rajouté un ";" entre les 2 expressions, après la 1ère accolade fermante :
Édit : Il faut aussi supprimer le dernier ";" après l'instruction "p" avant la dernière accolade fermante.
sed -n '/ERROR/! {H;x;s/^.*\n\(.*\n.*\)$/\1/;x;}; /ERROR/ {H;n;N;N;N;N;N;N;H;x;p}' rman****.log;-))
Édit : Il faut aussi supprimer le dernier ";" après l'instruction "p" avant la dernière accolade fermante.