Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/08/2014, à 08:46

Gaara

[presque résolu] Bash - écrire un log avec filtre

Bonjour à tous,

Pour un logiciel perso j'utilise cette ligne en bash afin de créer un log avec la date du jour:

NOW=$(date +"%F")
exec >/home/gaara/chemin/fichier_log-$NOW.log 2>&1

Ce code fonctionne bien, cependant j'aimerais filtrer le log car de nombreuses lignes ne me servent à rien, et le log peut faire 50Mo..

Donc j'aimerais pouvoir ne pas écrire les lignes commençant par "matching", car c'est le reste qui m'intéresse.
Comment pourrais-je faire? Je suis un peu nul en bash, le reste est en python.

Merci

Dernière modification par Gaara (Le 23/08/2014, à 11:24)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#2 Le 08/08/2014, à 08:58

melixgaro

Re : [presque résolu] Bash - écrire un log avec filtre

Salut,

qui fabrique les lignes de journalisation ? c'est ton programme python ?
si dans ton script bash, tu as une ligne du genre

mon_prog_python

tu peux la remplacer par

mon_prog_python | grep "matching"

Mais j'imagine que tu espères un autre genre de solution...

Édition :
je viens de relire et de voir que tu ne veux pas les lignes commençant par/contenant matching, donc il faut écrire

mon_prog_python | grep -v "matching"

Dernière modification par melixgaro (Le 08/08/2014, à 09:05)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#3 Le 08/08/2014, à 09:04

pingouinux

Re : [presque résolu] Bash - écrire un log avec filtre

Bonjour,
Cet exemple peut-t-il t'être utile ?

$ cat script
exec >toto
(
echo "matching lig1"
echo "nomatching lig2"
echo "matching lig3"
echo "nomatching lig4"
) | grep -v "^matching"

$ ./script
$ cat toto
nomatching lig2
nomatching lig4

Hors ligne

#4 Le 08/08/2014, à 09:06

Gaara

Re : [presque résolu] Bash - écrire un log avec filtre

Salut melixgaro, merci pour ta réponse.

Je fais mes maj automatiquement avec cron, une fois par jour. C'est très pratique !
Et mon logiciel est une notification avec progression de la maj, qui lit le log de /etc/cron.daily/apt pour en extraire les infos.
Je vais essayer avec grep


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#5 Le 08/08/2014, à 09:07

melixgaro

Re : [presque résolu] Bash - écrire un log avec filtre

J'ai édité mon message après avoir vu la proposition de pingouinux et avoir relu ta demande


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#6 Le 08/08/2014, à 09:10

Gaara

Re : [presque résolu] Bash - écrire un log avec filtre

Bonjour pingouinux, merci de ton aide
donc si je fais

NOW=$(date +"%F")
exec >/home/gaara/chemin/fichier_log-$NOW.log 2>&1 | grep -v "matching"

ça pourrait marcher ?

Edit: d'après la réponse de melixgaro ça devrait être ça
En fait, si je comprend, la commande grep chaine séléctionne "chaine", et grev -v chaine enlève "chaine" ?

Dernière modification par Gaara (Le 08/08/2014, à 09:13)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#7 Le 08/08/2014, à 09:17

Gaara

Re : [presque résolu] Bash - écrire un log avec filtre

Autre question: pingouinux tu écris

grep -v "^matching"

à quoi correspond le ^ ?
si j'écris

grep -v "matching"

alors seul matching sera supprimé ou toute la ligne? (Je souhaite enlever toute la ligne)

Edit: pour info, mon log ressemble à ça actuellement (partie qui m'intéresse et partie à ne pas écrire)

[...]
3 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 2 094 ko dans les archives.
Après cette opération, 1 024 o d'espace disque supplémentaires seront utilisés.
Réception de : 1 http://bouyguestelecom.ubuntu.lafibre.info/ubuntu/ trusty-updates/main libssl1.0.0 i386 1.0.1f-1ubuntu2.5 [780 kB]
Réception de : 2 http://bouyguestelecom.ubuntu.lafibre.info/ubuntu/ trusty-updates/main libssl1.0.0 amd64 1.0.1f-1ubuntu2.5 [826 kB]
Réception de : 3 http://bouyguestelecom.ubuntu.lafibre.info/ubuntu/ trusty-updates/main openssl amd64 1.0.1f-1ubuntu2.5 [488 kB]
2 094 ko réceptionnés en 2s (962 ko/s)
Téléchargement achevé et dans le mode téléchargement uniquement
+ update_stamp /var/lib/apt/periodic/download-upgradeable-stamp
+ stamp=/var/lib/apt/periodic/download-upgradeable-stamp
+ touch /var/lib/apt/periodic/download-upgradeable-stamp
+ debug_echo download upgradable (success)
+ [ 3 -ge 1 ]
+ echo download upgradable (success)
download upgradable (success)
+ UPGRADE_STAMP=/var/lib/apt/periodic/upgrade-stamp
+ which unattended-upgrade
+ check_stamp /var/lib/apt/periodic/upgrade-stamp 1
+ stamp=/var/lib/apt/periodic/upgrade-stamp
+ interval=1
+ [ 1 -eq 0 ]
+ [ ! -f /var/lib/apt/periodic/upgrade-stamp ]
+ stamp_file=/var/lib/apt/periodic/upgrade-stamp
+ date -r /var/lib/apt/periodic/upgrade-stamp --iso-8601
+ date --date=2014-08-07 +%s
+ stamp=1407362400
+ [ 0 != 0 ]
+ date --iso-8601
+ date --date=2014-08-08 +%s
+ now=1407448800
+ [ 0 != 0 ]
+ delta=86400
+ interval=86400
+ debug_echo check_stamp: interval=86400, now=1407448800, stamp=1407362400, delta=86400 (sec)
+ [ 3 -ge 1 ]
+ echo check_stamp: interval=86400, now=1407448800, stamp=1407362400, delta=86400 (sec)
check_stamp: interval=86400, now=1407448800, stamp=1407362400, delta=86400 (sec)
+ [ 1407362400 -gt 1407535200 ]
+ [ 86400 -ge 86400 ]
+ return 0
+ unattended-upgrade -d
Paquets faisant initialement partie de la liste noire : 
Démarrage du script de mise à niveau automatique
Les origines autorisées sont : ['o=Canonical,a=trusty', 'o=Canonical,a=trusty', 'o=Ubuntu,a=trusty-backports', 'o=Ubuntu,a=trusty', 'o=Ubuntu,a=trusty-security', 'o=Ubuntu,a=trusty-updates', 'o=LP-PPA-app-review-board,a=trusty', 'o=LP-PPA-chromium-daily-stable,a=trusty', 'o=LP-PPA-danielrichter2007-grub-customizer,a=trusty', 'o=LP-PPA-fossfreedom-byzanz,a=trusty', 'o=LP-PPA-gnome3-team-gnome3,a=trusty', 'o=LP-PPA-jre-phoenix,a=trusty', 'o=LP-PPA-kubuntu-ppa-backports,a=trusty', 'o=LP-PPA-kubuntu-ppa,a=trusty', 'o=LP-PPA-nilarimogard-webupd8,a=trusty', 'o=LP-PPA-samrog131,a=trusty', 'o=LP-PPA-skunk-pepper-flash,a=trusty', 'o=LP-PPA-sunab-sozi-release,a=trusty', 'o=LP-PPA-ubuntu-wine,a=trusty', 'o=LP-PPA-videolan-master-daily,a=trusty', 'o=LP-PPA-vincent-vandevyvre-vvv,a=trusty', 'o=LP-PPA-webupd8team-java,a=trusty', 'o=LP-PPA-yoggic-dpluzz,a=trusty']
matching 'o'='Canonical' against '<Origin component:'main' archive:'trusty-updates' origin:'Ubuntu' label:'Ubuntu' site:'bouyguestelecom.ubuntu.lafibre.info' isTrusted:True>'
matching 'a'='trusty' against '<Origin component:'main' archive:'trusty-updates' origin:'Ubuntu' label:'Ubuntu' site:'bouyguestelecom.ubuntu.lafibre.info' isTrusted:True>'
matching 'o'='Canonical' against '<Origin component:'main' archive:'trusty-updates' origin:'Ubuntu' label:'Ubuntu' site:'bouyguestelecom.ubuntu.lafibre.info' isTrusted:True>'
matching 'a'='trusty' against '<Origin component:'main' archive:'trusty-updates' origin:'Ubuntu' label:'Ubuntu' site:'bouyguestelecom.ubuntu.lafibre.info' isTrusted:True>'
matching 'o'='Ubuntu' against '<Origin component:'main' archive:'trusty-updates' origin:'Ubuntu' label:'Ubuntu' site:'bouyguestelecom.ubuntu.lafibre.info' isTrusted:True>'
[...]

Dernière modification par Gaara (Le 08/08/2014, à 09:21)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#8 Le 08/08/2014, à 09:17

melixgaro

Re : [presque résolu] Bash - écrire un log avec filtre

Oui

grep "matching"

conserve les lignes contenant matching

grep -v "matching"

enlève les lignes contenant matching

La réponse de pingouinux est encore plus sélective

grep -v "^matching"

enlève les lignes commençant par matching

si tu n'es pas sûr de la casse du motif "matching", tu peux passer l'option "-i" à grep


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#9 Le 08/08/2014, à 09:19

melixgaro

Re : [presque résolu] Bash - écrire un log avec filtre

Donc si tu n'es pas sûr de la casse du motif matching, ni de son emplacement, il faut :

grep -vi "matching"

Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#10 Le 08/08/2014, à 09:24

Gaara

Re : [presque résolu] Bash - écrire un log avec filtre

Ok merci bcp je vais essayer.
Je saurais si ça fonctionne qu'à la prochaine maj !


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#11 Le 08/08/2014, à 09:28

melixgaro

Re : [presque résolu] Bash - écrire un log avec filtre

mais mets le grep derrière ton programme python (enfin le programme principal qui imprime le blabla), pas derrière le exec comme dans ton message #6


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#12 Le 08/08/2014, à 09:36

pingouinux

Re : [presque résolu] Bash - écrire un log avec filtre

Gaara #6 a écrit :

NOW=$(date +"%F")
exec >/home/gaara/chemin/fichier_log-$NOW.log 2>&1 | grep -v "matching"

Ça ne marchera pas. Je ferais plutôt ceci :

NOW=$(date +"%F")
exec >/home/gaara/chemin/fichier_log-"$NOW".log 2>&1
(
...........
Tes commandes
..........
) | grep -v "^matching"

Hors ligne

#13 Le 08/08/2014, à 09:37

Gaara

Re : [presque résolu] Bash - écrire un log avec filtre

Ben le exec est directement dans le script de apt, tout au début. Il appelle ensuite mon script python, s'il y a des maj à faire.
ça se présente comme ça:

#  APT::Periodic::Verbose "0";
#  - Send report mail to root
#      0:  no report             (or null string)
#      1:  progress report       (actually any string)
#      2:  + command outputs     (remove -qq, remove 2>/dev/null, add -d)
#      3:  + trace on            

# début du code
NOW=$(date +"%F")
exec >/home/guillaume/.auto_upgrade_notify/log/apt_terminal-$NOW.log 2>&1 | grep -v "^matching"

# début du code d'apt
check_stamp()
{
    stamp="$1"
    interval="$2"
[...] # reste de apt
appel du script python ligne.. 479

Tu penses que ça pourrait marcher comme ça ? (mais je vais essayer de lancer cron à la main, pour voir)

Dernière modification par Gaara (Le 08/08/2014, à 09:38)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#14 Le 08/08/2014, à 09:41

Gaara

Re : [presque résolu] Bash - écrire un log avec filtre

Ah ok. Donc une parenthèse qui enferme tout le code d'apt, et ensuite le grep.
Je vais essayer tongue


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#15 Le 08/08/2014, à 09:51

pingouinux

Re : [presque résolu] Bash - écrire un log avec filtre

Donc une parenthèse qui enferme tout le code d'apt, et ensuite le grep.

Oui, mais il est préférable de mettre DEUX parenthèses… smile

Hors ligne

#16 Le 08/08/2014, à 09:55

Gaara

Re : [presque résolu] Bash - écrire un log avec filtre

big_smile

Merci !


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#17 Le 08/08/2014, à 12:13

Gaara

Re : [presque résolu] Bash - écrire un log avec filtre

Ça à l'air de marcher, je confirmerais à la prochaine maj.

Et pour aller plus loin, si je veux supprimer les lignes qui commencent par "matching", "Ign", et Atteint",
si je fais:

NOW=$(date +"%F")
exec >/home/gaara/chemin/fichier_log-"$NOW".log 2>&1
(
...........
script apt
..........
) | grep -v '^matching\|^Ign\|^Atteint'

ça fonctionnera ? (source)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#18 Le 08/08/2014, à 12:16

melixgaro

Re : [presque résolu] Bash - écrire un log avec filtre

ben il me semble que c'est correct


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#19 Le 08/08/2014, à 12:40

Gaara

Re : [presque résolu] Bash - écrire un log avec filtre

Ok merci smile

/Troll/ les smiley sont bleus maintenant !!


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#20 Le 08/08/2014, à 12:53

pingouinux

Re : [presque résolu] Bash - écrire un log avec filtre

Gaara #17 a écrit :
..........
) | grep -v '^matching\|^Ign\|^Atteint'

C'est bon. Tu peux aussi utiliser cette syntaxe

) | grep -Ev '^(matching|Ign|Atteint)'

Hors ligne

#21 Le 08/08/2014, à 13:11

melixgaro

Re : [presque résolu] Bash - écrire un log avec filtre

HS : non les frimousses sont de nouveau jaunes. c'est en l'honneur d'helly, membre disparu du forum (voir ici). (je n'en sais pas plus, je ne l'ai pas connu)

Édition : en fait, la date ne correspond, apparemment un problème de css...

Dernière modification par melixgaro (Le 17/08/2014, à 06:41)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#22 Le 12/08/2014, à 10:03

Gaara

Re : [presque résolu] Bash - écrire un log avec filtre

Juste un petit post pour dire que tout est ok avec cette commande !

@melixgaro: ah d'accord, je ne l'ai pas connu non plus


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#23 Le 23/08/2014, à 11:23

Gaara

Re : [presque résolu] Bash - écrire un log avec filtre

Je reviens pour cette commande:

exec >/home/gaara/mon_script/log/apt_terminal-$NOW.log 2>&1
(
......
code du script
......
) | grep -v '^matching\|^Checking\|^adjusting\|^sanity\|^Ign\^Atteint'

Les lignes qui commencent par "matching" sont bien supprimées, mais pas les autres.
J'ai essayé les deux syntaxes, mais dans mon log il y a toujours:

Atteint http://extras.ubuntu.com trusty Release.gpg
Ign http://ppa.launchpad.net trusty InRelease
Atteint http://extras.ubuntu.com trusty Release
Ign http://ppa.launchpad.net trusty InRelease
Atteint http://extras.ubuntu.com trusty/main amd64 Packages
Ign http://ppa.launchpad.net trusty InRelease
Atteint http://extras.ubuntu.com trusty/main i386 Packages
Ign http://ppa.launchpad.net trusty InRelease
Ign http://ppa.launchpad.net trusty InRelease
Ign http://ppa.launchpad.net trusty InRelease

Y aurait-il une autre façon de faire?
En fait j'aimerais diminuer les plus possible de ligne, car mon script scanne ce fichier log ligne par ligne en boucle (car scanné en cours d'écriture), à la recherche d'expression qui me sont utiles.

Edit:
Je vais essayer avec l'option -vi:

....
) | grep -vi '^matching\|^Checking\|^adjusting\|^sanity\|^Ign\^Atteint'

Dernière modification par Gaara (Le 23/08/2014, à 11:29)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#24 Le 23/08/2014, à 11:39

melixgaro

Re : [presque résolu] Bash - écrire un log avec filtre

yo !
Attention tu as oublié la | devant ^Atteint

Ensuite, ta ligne ne marchera pas sur une machine dans une autre langue. Chez moi c'est en angliche et j'ai ce style là

Hit http://ppa.launchpad.net saucy/main i386 Packages
Hit http://ppa.launchpad.net precise/main i386 Packages
Ign http://ppa.launchpad.net raring/main i386 Packages/DiffIndex
Hit http://ppa.launchpad.net raring/main i386 Packages
Hit http://ppa.launchpad.net saucy/main i386 Packages

Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#25 Le 23/08/2014, à 11:42

melixgaro

Re : [presque résolu] Bash - écrire un log avec filtre

Tu devrais forcer la langue dans le script, en ajoutant ceci le plus tôt possible

export LC_ALL=fr_FR.UTF-8

pour forcer la langue d'Hugo dans le reste de ton sous-shell (celui initié par ton script)

ou

export LC_ALL=en_GB.UTF-8

pour forcer la langue de Pratchett dans le reste de ton sous-shell

Dernière modification par melixgaro (Le 23/08/2014, à 11:43)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne