[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: