[HS] find et recherche d'une expression dans des fichiers
Le
David Martin

--0000000000003adfdc05b9f66cd7
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Bonjour,
Je cherche, dans un r̓©pertoire qui contient des fichiers de log (environ
600) qui contiennent eux memes une 10aine de ligne max chacuns,
le moyen d'en extraire deux chaines de caract̓¨res (̓©l̓¨ves ou professeurs)
qui sont contenue dans la premi̓¨re ligne des fichiers.
Je n'arrive pas ̓ extraire uniquement la permiere ligne du fichier et
passer ̓ un autre fichier.
Les lignes ressemble ̓ ceci :
CONNECTION Web 27 Jan 2021 06:50 jean.dujardin professeurs PC-00034-BLA
win10 172.16.78.30 1380
j'aimerai extraire professeurs et le nom du pc, et passer ̓ un autre
fichier.
awk '{print $8,$9}' fichier.log pour m'extraire professeurs et
PC-00034-BLA fonctionne mais sur un fichier mais du coup j'ai toutes les
lignes
et aussi avec grep j'ai toute les lignes
grep -r --include="*.log" -i "professeurs"
Avez-vous une id̓©e ?
--
david martin
--0000000000003adfdc05b9f66cd7
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir="ltr"><div dir="ltr"><div dir="ltr">Bonjour,<div><br></div><div>Je cherche, dans un r̓©pertoire qui contient des fichiers de log (environ 600) qui contiennent eux memes une 10aine de ligne max chacuns,</div><div>le moyen d'en extraire deux͂ chaines de caract̓¨res (̓©l̓¨ves ou professeurs) qui sont͂ contenue dans la premi̓¨re ligne des fichiers.</div><div><br></div><div>Je n'arrive pas ̓ extraire uniquement la permiere ligne du fichier et passer ̓ un autre fichier.</div><div><br></div><div>Les lignes ressemble ̓ ceci :</div><div>CONNECTION͂ Web 27 Jan 2021 06:50͂ jean.dujardin professeurs PC-00034-BLA win10 172.16.78.30͂ 1380</div><div><br></div><div>j'aimerai extraire professeurs et le nom du pc, et passer ̓ un autre fichier.</div><div><br></div><div>awk '{print $8,$9}' fichier.log͂ pour m'extraire professeurs et PC-00034-BLA͂ fonctionne mais sur un fichier mais du coup j'ai toutes les lignes<br></div><div><br></div><div>et aussi avec grep j'ai toute les lignes</div><div>grep -r --include="*.log" -i "professeurs"͂ </div><div><br></div><div>Avez-vous une id̓©e ?</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">david martin<div><br></div></div></div></div></div></div></div>
--0000000000003adfdc05b9f66cd7--
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Bonjour,
Je cherche, dans un r̓©pertoire qui contient des fichiers de log (environ
600) qui contiennent eux memes une 10aine de ligne max chacuns,
le moyen d'en extraire deux chaines de caract̓¨res (̓©l̓¨ves ou professeurs)
qui sont contenue dans la premi̓¨re ligne des fichiers.
Je n'arrive pas ̓ extraire uniquement la permiere ligne du fichier et
passer ̓ un autre fichier.
Les lignes ressemble ̓ ceci :
CONNECTION Web 27 Jan 2021 06:50 jean.dujardin professeurs PC-00034-BLA
win10 172.16.78.30 1380
j'aimerai extraire professeurs et le nom du pc, et passer ̓ un autre
fichier.
awk '{print $8,$9}' fichier.log pour m'extraire professeurs et
PC-00034-BLA fonctionne mais sur un fichier mais du coup j'ai toutes les
lignes
et aussi avec grep j'ai toute les lignes
grep -r --include="*.log" -i "professeurs"
Avez-vous une id̓©e ?
--
david martin
--0000000000003adfdc05b9f66cd7
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir="ltr"><div dir="ltr"><div dir="ltr">Bonjour,<div><br></div><div>Je cherche, dans un r̓©pertoire qui contient des fichiers de log (environ 600) qui contiennent eux memes une 10aine de ligne max chacuns,</div><div>le moyen d'en extraire deux͂ chaines de caract̓¨res (̓©l̓¨ves ou professeurs) qui sont͂ contenue dans la premi̓¨re ligne des fichiers.</div><div><br></div><div>Je n'arrive pas ̓ extraire uniquement la permiere ligne du fichier et passer ̓ un autre fichier.</div><div><br></div><div>Les lignes ressemble ̓ ceci :</div><div>CONNECTION͂ Web 27 Jan 2021 06:50͂ jean.dujardin professeurs PC-00034-BLA win10 172.16.78.30͂ 1380</div><div><br></div><div>j'aimerai extraire professeurs et le nom du pc, et passer ̓ un autre fichier.</div><div><br></div><div>awk '{print $8,$9}' fichier.log͂ pour m'extraire professeurs et PC-00034-BLA͂ fonctionne mais sur un fichier mais du coup j'ai toutes les lignes<br></div><div><br></div><div>et aussi avec grep j'ai toute les lignes</div><div>grep -r --include="*.log" -i "professeurs"͂ </div><div><br></div><div>Avez-vous une id̓©e ?</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">david martin<div><br></div></div></div></div></div></div></div>
--0000000000003adfdc05b9f66cd7--
Le 28/01/2021 Í 15:08, David Martin a écrit :
Quelque chose comme cela peut-être :
grep -m 1 'professeurs' *.log >essai_prof.txt
Amicalement,
Jean-Pierre Giraud
Bonjour David,
en premier c'est le fichier auth.log qu'il faut parser
sudo find /var/log -name auth.log
(rentrer le mot de passe)
/var/log/auth.log
ensuite :
sudo cat /var/log/auth.log | grep '(professeurs|PC-00034-BLA)'
désolé, mais je n'ai pas le fichier log sous les yeux et je conseille
de consulter les liens suivants pour affiner les choses :
https://living-sun.com/fr/grep/278684-how-to-grep-two-patterns-at-once-grep.html
https://www.tuteurs.ens.fr/unix/exercices/solutions/grep-sol.html
solution avancée :
https://www.golinuxcloud.com/find-exec-multiple-commands-examples-unix/#Combine_find_exec_with_grep_in_Linux_or_Unix
merci pour ton aimable attention
Bien Í toi
Bernard
Avec
head -n 1 fichier.txt
on obtient la première ligne de fichier.txt
--
Pierre Meurisse
Merci de noter que ma nouvelle adresse est :
Je continue provisoirement de recevoir les courriers envoyés
aux adresses précédentes.
C'est méthode la plus efficace pour récupérer toute la ligne sans traitement.
Si tu veux ajouter un filtre, tu peux ajouter du `|grep …`, mais tu peux aussi utiliser sed
pour avoir tout dans une seule commande
sed -e '1 expr' fichier.txt
ou expr est une expression sed
1 est le numéro de la ligne, qui peut être remplacé par une
plage, `3,5 expr` pour appliquer l'expression sur les lignes 3 Í 5, ou
`/regex1/,/regex2/ expr` pour appliquer l'expression de la première ligne qui match
regex1 Í la la première qui suit et match regex2 (et on peut mixer regex et numéro, $ pour
indiquer la dernière ligne).
Attention aux format sed des regex, en général j'utilise sed -re '…' pour que [] et () soient
interprétés comme d'habitude (sinon il faut les échapper pour qu'ils soient interprétés, c'est
l'inverse du fonctionnement habituel)
Ici, si tu veux le nom du pc qui est sur la 1re ligne, seulement si c'est un prof ça pourrait
être qqchose comme
sed -nre '1 s/.*professeurs ([^ ]+) .*/1/ p' fichier
-n => ne rien afficher par défaut
s/recherche/remplacement/ => substitution
p => afficher si qqchose a été substitué
Mais suivant les cas, ça peut être plus simple avec head + awk, si tu veux toujours les champs
8 & 9 de la première ligne de chaque fichier ça peut être plus simple avec
head -1 dossier/*.log|awk '{print $8 " " $9}'
À priori tu peux tout faire avec sed ou awk, mais parfois c'est plus simple ou plus lisible
d'enchaÍ®ner des head, tail, grep, tr, awk, sed, …
…|sort|uniq
ou
…|sort|uniq -c
sont aussi utiles
Bonne lecture des manpages ;-)
(tu trouveras aussi de l'aide sur le net pour chacune de ces commandes)
--
Daniel
Un soldat doit être prêt a mourir pour sa patrie, même au péril de sa vie.
Henri Monnier
je tombe dans le thread et je lis
du coup
awk '{print $8,$9 ; exit }' fichier.log
et si tu utilises gawk
awk '{print $8,$9 ; nextfile }' *.log
a+
marc
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Merci ̓ vous tous pour vos r̓©ponses, c'est extra !
J'ai pu me d̓©patouiller.
Le jeu. 28 janv. 2021 ̓ 16:43, Marc Chantreux
--
david martin
--000000000000f00ece05ba45da24
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<br>
je tombe dans le thread et je lis<br>
<br>
> > awk '{print $8,$9}' fichier.log͂ pour m'extraire professeurs et PC-00034-BLA͂ <br>
> > fonctionne mais sur un fichier mais du coup j'ai toutes les lignes <br>
<br>
du coup<br>
<br>
͂ ͂ awk '{print $8,$9 ; exit }' fichier.log<br>
<br>
et si tu utilises gawk<br>
<br>
͂ ͂ awk '{print $8,$9 ; nextfile }' *.log<br>
<br>
a+<br>
marc<br>
<br>
</div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">david martin<div><br></div></div></div>
--000000000000f00ece05ba45da24--