Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

6 réponses
Avatar
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&#39;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&#39;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&#39;aimerai extraire professeurs et le nom du pc, et passer ̓  un autre fichier.</div><div><br></div><div>awk &#39;{print $8,$9}&#39; fichier.log͂  pour m&#39;extraire professeurs et PC-00034-BLA͂  fonctionne mais sur un fichier mais du coup j&#39;ai toutes les lignes<br></div><div><br></div><div>et aussi avec grep j&#39;ai toute les lignes</div><div>grep -r --include=&quot;*.log&quot; -i &quot;professeurs&quot;͂ </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--

6 réponses

Avatar
Jean-Pierre Giraud
Bonjour,
Le 28/01/2021 Í  15:08, David Martin a écrit :
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

Quelque chose comme cela peut-être :
grep -m 1 'professeurs' *.log >essai_prof.txt
Amicalement,
Jean-Pierre Giraud
Avatar
Bernard Schoenacker
----- Mail original -----
De: "David Martin"
À: " French"
Envoyé: Jeudi 28 Janvier 2021 15:08:19
Objet: [HS] find et recherche d'une expression dans des fichiers
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

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
Avatar
Pierre Meurisse
On Thu, Jan 28, 2021 at 03:08:19PM +0100, David Martin wrote:
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 ?

Avec
head -n 1 fichier.txt
on obtient la première ligne de fichier.txt
--
david martin

--
Pierre Meurisse
Merci de noter que ma nouvelle adresse est :
Je continue provisoirement de recevoir les courriers envoyés
aux adresses précédentes.
Avatar
Daniel Caillibaud
Le 28/01/21 Í  15:53, Pierre Meurisse a écrit :
head -n 1 fichier.txt
on obtient la première ligne de fichier.txt

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
Avatar
Marc Chantreux
salut,
je tombe dans le thread et je lis
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


du coup
awk '{print $8,$9 ; exit }' fichier.log
et si tu utilises gawk
awk '{print $8,$9 ; nextfile }' *.log
a+
marc
Avatar
David Martin
--000000000000f00ece05ba45da24
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 a ̓©crit :
salut,
je tombe dans le thread et je lis
> 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

du coup
awk '{print $8,$9 ; exit }' fichier.log
et si tu utilises gawk
awk '{print $8,$9 ; nextfile }' *.log
a+
marc

--
david martin
--000000000000f00ece05ba45da24
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir="ltr">Merci ̓  vous tous pour vos r̓©ponses, c&#39;est extra !<div>J&#39;ai pu me d̓©patouiller.</div><div><br><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le͂ jeu. 28 janv. 2021 ̓ ͂ 16:43, Marc Chantreux &lt;<a href="mailto:"></a>&gt; a ̓©crit͂ :<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">salut,<br>
<br>
je tombe dans le thread et je lis<br>
<br>
&gt; &gt; awk &#39;{print $8,$9}&#39; fichier.log͂  pour m&#39;extraire professeurs et PC-00034-BLA͂ <br>
&gt; &gt; fonctionne mais sur un fichier mais du coup j&#39;ai toutes les lignes <br>
<br>
du coup<br>
<br>
͂  ͂  awk &#39;{print $8,$9 ; exit }&#39; fichier.log<br>
<br>
et si tu utilises gawk<br>
<br>
͂  ͂  awk &#39;{print $8,$9 ; nextfile }&#39; *.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--