# Recherches ocurrences dans les dernières lignes

**URL:** <https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443 "2016-02-21T03:41:06Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/1 "2016-02-21T03:41:06Z")

</div>

Je sais lire les n dernières lignes d’un fichier avec 'tail -n’  
Je sais trouver une occurrence dans un fichier avec 'grep’  
MAIS, je ne sais pas conjuguer les deux tris :  
lire dans les 20 dernières lignes de /chemin/fichier toutes les lignes ayant 'mot’  
Merci

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/2 "2016-02-21T03:41:06Z")

</div>

```auto
 :question: :question: :question:
```

❓❓❓

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/3 "2016-02-21T03:41:07Z")

</div>

Ben c’est ce que j’ai essayé et ça ne répond pas à mes attentes ![:017](https://www.debian-fr.org/uploads/default/original/1X/7bbea83f89515ab7c7a738dddb86c4d4f140bd13.gif "reflechit")  
Je vais retester sur un autre fichier.

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/4 "2016-02-21T03:41:07Z")

</div>

Pourtant ça correspond bien à ta description de ton besoin. ![:eusa-think:](https://www.debian-fr.org/uploads/default/original/1X/98cae0704aea0201d04f151843e80a3ecd391eca.gif "Think")

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/5 "2016-02-21T03:41:07Z")

</div>

OK, testé sur u autre fichier et ça fonctionne bien.  
Je referai un essai demain sur le ‹&nbsp;log&nbsp;› qui m’intéresse, j’ai du faire une faute de frappe qq part 😒  
Merci ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/6 "2016-02-21T03:41:07Z")

</div>

Pendant que j’y suis :  
commande pour trouver la première ligne qui comporte “mot” dans /chemin/fichier  
et seulement cette 1ère ligne, avec son N° si possible.

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/7 "2016-02-21T03:41:07Z")

</div>

Même principe :

```auto

```

😉

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/8 "2016-02-21T03:41:09Z")

</div>

Pour le dernier en awk pour le fun :

```auto

```

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/9 "2016-02-21T03:41:11Z")

</div>

Merci à vous, vous êtes des anges ![:007](https://www.debian-fr.org/uploads/default/original/1X/e72d3b45191f9b2363aa21bfae6f42497bc4042b.gif "yeux-coeur")  
J’avais fait une erreur car j’ai réessayé ce matin et ça fonctionne bien sûr.  
Y’aura d’autres demandes 😃

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/10 "2016-02-21T03:41:19Z")

</div>

Une autre donc :  
supprimer un champ dans un fichier, en connaissant le N° de la 1ère ligne et le N° de la dernière ligne (la dernière ligne pouvant éventuellement être la dernière du fichier)  
❓

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/11 "2016-02-21T03:41:19Z")

</div>

Supprimer les lignes 10 à 20 (inclue des deux cotés) :

```auto

```

Supprimer les 20 première lignes :

```auto

```

Ne garder que les 9 premières lignes :

```auto

```

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/12 "2016-02-21T03:41:19Z")

</div>

Super cette commande ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")  
Je n’ai pas réussi à trouver dans les tutos.  
Le plus compliqué pour moi, c’est de savoir quoi chercher.  
Dans celui-là, par exemple, quel est le paragraphe concerné pour ce genre de travail sur des fichiers :  
[http://abs.traduc.org/abs-fr/](http://abs.traduc.org/abs-fr/)  
Merci Michel, bonne nuit !

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/13 "2016-02-21T03:41:19Z")

</div>

Je sais pas trop, je l’ai regardé un peu vite.  
Grosso modo il existe 3 commandes de manipulation de texte : grep, sed et awk.  
grep filtre en fonction d’un motif  
sed manipule à partir d’expression régulière (ça permet de réellement modifier le texte par exemple)  
awk peut faire tout ce que grep fais (c’est aussi vrai pour sed, mais en moins pratique), il peut aussi découper une ligne pour en faire ce que tu veut (un peu comme cut mais en 100 fois plus puissant)

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/14 "2016-02-21T03:41:22Z")

</div>

Merci, je retiens sed et awk … grep, je connais déjà un peu.  
 ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

---

<div class="post-metadata">

**Author:** ![nilux17](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/n/bc79bd/32.png) [@nilux17](https://www.debian-fr.org/u/nilux17)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/15 "2016-02-21T03:41:23Z")

</div>

Il y a aussi cut qui permet avec une syntaxe differente et peut-etre plus simple d’extraire des champs de fichiers avec séparateur, exemple :

```auto

```

en awk :

```auto

```

en sed :

```auto

```

tout le monde y trouve son compte… perso, instinctivement, j’utilise sed…

une remarque sur grep : le motif peut-être une expression réguliaire :  
ex, pour lister les processus de root, il faut faire :

```auto

```

et non :

```auto

```

et si je pipe avec un nombre de ligne retourner :

`nico@nc10b:~$ ps aux |grep ^root |wc -l
83
nico@nc10b:~$ ps aux |grep root |wc -l
84`

sinon, je me souviens une fois ou j’avais eu besoin d’extraire une partie d’un fichier, genre de la ligne 6 à la ligne 10 … j’avais fait un genre :

`
head -n 10 /path/fichier |tail -n 5`

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/16 "2016-02-21T03:41:23Z")

</div>

Toutes ces réponses sont intéressantes et je les note.  
Une question bête, sur laquelle je n’ai pas encore cherché :  
la commande indiquée par Michel fonctionne bien mais peut-on y ajouter, dans la même ligne (ou sur une autre dans un script) la sauvegarde du fichier ainsi modifié ?

---

<div class="post-metadata">

**Author:** ![nilux17](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/n/bc79bd/32.png) [@nilux17](https://www.debian-fr.org/u/nilux17)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/17 "2016-02-21T03:41:23Z")

</div>

Si tu souhaites sauvegarder le résultat d’une commande dans un fichier, il faut alors utiliser la redirection du flu de sortie :

```auto

```

c’est bien ça que tu souhaites faire ?  
on peu aussi faire :

```auto

```

cela permet de ne pas ecraser le contenu de “nom\_fichier\_resultant” mais de placer le resultat de la commande “à la suite” …

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/18 "2016-02-21T03:41:23Z")

</div>

[quote=«&nbsp;nilux17&nbsp;»]Il y a aussi cut qui permet avec une syntaxe differente et peut-etre plus simple d’extraire des champs de fichiers avec séparateur, exemple :

```auto
cut -d : -f 1 /etc/passwd
```

en awk :

```auto
awk -F":" '{print $1}' /etc/passwd
```

en sed :

`sed "s/:.*$//" /etc/passwd`[/quote]  
Là pour sed c’est un cas particulier. Si tu veux récupérer dossier home des utilisateurs, c’est déjà moins agréable :

`cut -d : -f 5 /etc/passwd
awk -F":" '{print $5}' /etc/passwd
sed "s/^.*:\(.*\):.*$/\1/" /etc/passwd`

> [@nilux17](#):
>
> tout le monde y trouve son compte.. perso, instinctivement, j’utilise sed…

Moi aussi maintenant, maintenant j’essaie d’utiliser awk à chaque fois que c’est pertinent.

[quote=«&nbsp;nilux17&nbsp;»]et si je pipe avec un nombre de ligne retourner :

`nico@nc10b:~$ ps aux |grep ^root |wc -l
83
nico@nc10b:~$ ps aux |grep root |wc -l
84`[/quote]  
wc ne sert à rien ici :

```auto
ps aux |grep -c ^root
```

[quote=«&nbsp;nilux17&nbsp;»]sinon, je me souviens une fois ou j’avais eu besoin d’extraire une partie d’un fichier, genre de la ligne 6 à la ligne 10 … j’avais fait un genre :

`
head -n 10 /path/fichier |tail -n 5`[/quote]  
En principe awk est à la fois plus flexible/pratique et plus performant.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/19 "2016-02-21T03:41:23Z")

</div>

[quote=“ricardo”]Toutes ces réponses sont intéressantes et je les note.  
Une question bête, sur laquelle je n’ai pas encore cherché :  
la commande indiquée par Michel fonctionne bien mais peut-on y ajouter, dans la même ligne (ou sur une autre dans un script) la sauvegarde du fichier ainsi modifié ?[/quote]  
Tu ne peux pas directement. Il faut passer par un fichier temporaire.

```auto

```

Tu ne peux pas faire :

```auto

```

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 3:41 UTC](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443/20 "2016-02-21T03:41:25Z")

</div>

Merci Michel, je n’aurais pas trouvé ça tout seul.  
Ça fait un peu comme quand je copie qq chose vers mon serveur, je passe d’abord par /tmp.

[Page suivante](https://www.debian-fr.org/t/recherches-ocurrences-dans-les-dernieres-lignes/34443.md?page=2)
