Extraire certaines ligne d'un txt en shell

Résolu
nbonnet Messages postés 478 Date d'inscription   Statut Membre Dernière intervention   -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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.
A voir également:

12 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Re-

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

Devrait le faire ;-))
1
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

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

0
nbonnet Messages postés 478 Date d'inscription   Statut Membre Dernière intervention   46
 
euh merci je suppose que cela me permet de lire la date de la première ligne d'après ce que je comprend?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Ç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.
0

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

Posez votre question
nbonnet Messages postés 478 Date d'inscription   Statut Membre Dernière intervention   46
 
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.
0
nbonnet Messages postés 478 Date d'inscription   Statut Membre Dernière intervention   46
 
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.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
DATE=$(LC_TIME=en date '+%a %b %d')

;-))
0
nbonnet Messages postés 478 Date d'inscription   Statut Membre Dernière intervention   46
 
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
0
nbonnet Messages postés 478 Date d'inscription   Statut Membre Dernière intervention   46 > nbonnet Messages postés 478 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > nbonnet Messages postés 478 Date d'inscription   Statut Membre Dernière intervention  
 
DATE=$(LC_TIME=en date '+%a %b %d' | sed 's/0/ /') 
0
nbonnet Messages postés 478 Date d'inscription   Statut Membre Dernière intervention   46
 
dsl du retard j'étais sur autre chose je test et je fais un retour. Grand merci à toi.
0
nbonnet Messages postés 478 Date d'inscription   Statut Membre Dernière intervention   46
 
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?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Re-

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


Voir dans la FAQ : sed
0
nbonnet Messages postés 478 Date d'inscription   Statut Membre Dernière intervention   46
 
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
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
$
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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 ;-((
0