Simplifier un grep

Résolu/Fermé
dna.factory Messages postés 25421 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 16 décembre 2024 - Modifié par dna.factory le 15/05/2014 à 16:57
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 16 mai 2014 à 16:38
Bonjour,

Une fois n'est pas coutume, j'ai la solution à mon problème...
Mais j'en suis pas satisfait, donc je voulais savoir si y'avait plus propre...

j'ai une erreur qui apparait à période régulière parmi une centaines de fichiers de logs NON horodatés.
Je veux savoir quand cette erreur se produit

aujourd'hui, j'utilise la boucle suivante :
for fichier in 'grep  -h  chaine  *.log';do ll $fichier;done
(les apostrophes sont inversés (alt+gr7), mais apparament, ça passe pas bien dans le message)
Qu'Est-ce que vous me proposez ?



Stop failing the turing test !

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
15 mai 2014 à 17:53
Salut,

Je suppute que ton
grep
sort des chemins absolus de fichiers, puis que tu fais un affichage long avec un alias de
ls -l
histoire d'avoir la date (et éventuellement d'autres renseignements) des dits fichiers, exact ?

Que voudrais-tu améliorer ?
0
dna.factory Messages postés 25421 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 16 décembre 2024 1 613
15 mai 2014 à 20:30
les chemins sont relatifs, mais en gros, c'est ça...
L'idée, c'est de savoir si je peux me passer du for...
Je suppose que je pourrais le faire avec un find, (doit y'avoir un paramètre pour chercher une chaine dans un fichier, et je peux faire un -exec ls -l (ll) pour avoir le chemin... mais c'est encore plus compliqué..
L'idée en fait, c'est que de mon équipe, je suis le seul à 'maitriser' (un bien grand mot...) le for...
Je voudrais que mon équipe puisse faire la même commande, mais je voudrais qu'ils comprennent.. et si je leur mets un for ou un find... ils feront du copier coller sans comprendre...
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
15 mai 2014 à 20:46
Et pourquoi pas un simple
grep  -h  chaine  *.log' | xargs ll
?
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
16 mai 2014 à 09:34
hello
ne serait-ce pas -l plutot que -h ?
0
dna.factory Messages postés 25421 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 16 décembre 2024 1 613
Modifié par dna.factory le 16/05/2014 à 09:59
oups... oué...
C'est presque bon, c'est juste que pour une raison étrange, le xargs ne gère pas l'alias...
le
grep -l chaine *.log' | xargs ll 
me ressort
xargs: ll: No such file or directory
par contre, le
grep -l chaine *.log' | xargs ls -l(arth)
fonctionne

Encore mieux... avec cette méthode le rt fonctionne bien, et les fichiers sont mis dans l'ordre..., plus besoin de faire un |sort en précisant la colonne (j'aurais du faire du maner pour retrouver comment faire).

Merci zipe, c'est toi qui prends la tête, et si personne ne vient avec une réponse plus simple, c'est toi gagnera mon éternelle reconnaissance...
0
dna.factory Messages postés 25421 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 16 décembre 2024 1 613
16 mai 2014 à 16:34
Juste pour info : le xargs a été utilisé plus de 15 fois aujourd'hui par différents technicien...
Merci zipe31
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
Modifié par dubcek le 16/05/2014 à 09:39
hello
et avec
tail -f *.log  | awk '{"date" | getline d; close("date"); print d, $0}'
on affiche devant chaqe ligne, la date du message dans le fichier
0