Extraire certaines ligne d'un txt en shell [Résolu/Fermé]

Signaler
Messages postés
483
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
-
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
-
Bonjour,

JE voudrais pouvoir extraire d'un fichier log les log concernant le jour d'exécution de mon script. Je precise que toutes les lignes de mon fichier de log commence par la date sous la forme jjj mmm ddd.

Je n'arrive pas a trouver par quel moyen je peux attaquer ce problème. Je veux analyser les ligne jusqu'à ce que je trouve la date du jour. puis une fois cette ligne trouvée je veux extraire la fin du fichier et copier dans un autre fichier.

pouvez vous m'aider.

12 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 747
Re-

DATE=$(date '+%a %b %d')
sed -n '/^'"${DATE}"'/,$ p' radius.log>>rad.log 

Devrait le faire ;-))
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 59806 internautes nous ont dit merci ce mois-ci

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 747
Salut,

sed -n '/^jjj mmm ddd/,$ p' fichier.log

Messages postés
483
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
45
euh merci je suppose que cela me permet de lire la date de la première ligne d'après ce que je comprend?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 747
Ça te permet (en théorie) d'extraire effectivement toutes les lignes commençant (^) par le motif (jjj mmm ddd) supposé être ta date de référence et ce jusqu'à la fin ($) du fichier...

À adapter selon tes besoins.
Messages postés
483
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
45
oki cela fonctionne comme je veux. mais lorsque je le fait dans mon script en voulant utiliser la date du pc via la commande date :

sed -n '/^date \'+%a %b %d\'/,$ p' radius.log>>rad.log

voici la réponse.

./bago.sh: line 1: unexpected EOF while looking for matching `''
./bago.sh: line 2: syntax error: unexpected end of file

Si je comprend bien il y a un souci sur le EOF qui n'est pas marqué correctement. mais je vois pas comment.

quand je fait cette commande

sed -n '/^Mer jan 27/,$ p' radius.log>>rad.log

cela fonctionne sans problème.
Messages postés
483
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
45
Grand merci ca marche mais par contre quand ej le test sur mon serveur j'ai un souci sur la date. Je sais que cela n'a plus de rapport avec le debut du post mais peux tu m'aider.

Mon fichier de log sur le serveur à les dates en anglais (Wed Jan 27) et la commande date me la donne en français (Mer Jan 27) je trouve pas comment la passer en anglais. Il existe peut être une autre commande pour travailler sur la date.

Merci pour ton aide.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 747
DATE=$(LC_TIME=en date '+%a %b %d')

;-))
Messages postés
483
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
45
Slt je reviens sur cette partie de mon script.

J'ai une question tjs sur la date. mon serveur me genere des log daté sous la forme :

Tue Feb 9

mais la focntion date me renvoi

Tue Feb 09

comment je peux faire pour que cela corresponde? enfin je sais si c'est possible
Messages postés
483
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
45 >
Messages postés
483
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013

en cherchant de nouveau j'ai trouvé uns solution

DATE=$(LC_TIME=en date '+%a %b %d')
echo $DATE | sed 's/0/ /' > var.txt

mais maintenant je n'arrive pas a récup la ligne du fichier var.txt dans une variable
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 747 >
Messages postés
483
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013

DATE=$(LC_TIME=en date '+%a %b %d' | sed 's/0/ /') 
Messages postés
483
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
45
dsl du retard j'étais sur autre chose je test et je fais un retour. Grand merci à toi.
Messages postés
483
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
45
Ca marche nickel merci bien.

Puis je exagérer. Je viens d'éplucher pas mal de lien sur sed mais je trouve pas la commande qu'il me faut.

Je souhaite supprimer certaines lignes d'un des fichier temporaire que j'utilise. Je m'explique les "bonnes lignes" commencent toutes par [el.... et malheureusement je retrouve des lignes qui ne correspondent pas. Comment les supprimer du fichier pour éviter de polluer mes calculs.

Merci d'avance.
-
---------------------------------------------------------------------
La vie est-elle trop courte pour rester derrière son écran?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 747
Re-

sed -i.bak '/^\[el/!d' fichier.log


Voir dans la FAQ : sed
Messages postés
483
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
45
MERCIIIIII franchement grand merci. Pour la faq je suis peut etre passé a coté de l'option je sur le script depuis 8h30 donc je vois plus grand chose.

Merci a toi Jipicy
Messages postés
18162
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juillet 2020
4 903
hello
pour éviter le 0 devant le jour , utiliser %-
date '+%a %b %-d'
avec le mois en chiffre:
$ date '+%a %m %d'
Wed 02 10
$ date '+%a %-m %-d'
Wed 2 10
$
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 747
Merci.

Je m'obstinais à chercher la même directive que pour les jours du mois, à savoir "%d = le jour du mois (01..31)" et son pendant "%e = jour du mois ( 1..31)", mais pour les mois de l'année, mais il n'y en a pas ;-((