#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
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
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…
Hors ligne
#16 Le 08/08/2014, à 09:55
- Gaara
Re : [presque résolu] Bash - écrire un log avec filtre
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
/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
.......... ) | 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