Re: [HS] find et recherche d'une expression dans des fichiers
Le 28/01/21 à 15:53, Pierre Meurisse <pierre.meurisse59@free.fr> 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
Reply to: