# Enlever uniquement deux lignes dans un fichier avec BASH

**URL:** <https://www.debian-fr.org/t/enlever-uniquement-deux-lignes-dans-un-fichier-avec-bash/58894>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/enlever-uniquement-deux-lignes-dans-un-fichier-avec-bash/58894 "2016-02-21T18:03:25Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/enlever-uniquement-deux-lignes-dans-un-fichier-avec-bash/58894/1 "2016-02-21T18:03:25Z")

</div>

Bonjour,

Je cherche à supprimer uniquement deux lignes dans un fichier texte, en utilisant un script BASH.

Je connais le contenu de la première ligne, mais pas la seconde ligne. La seconde ligne est générée de manière aléatoire…

Le fichier se présente comme ceci :

```auto
#ID:145
blabla tutu tutu
#ID:146
4525 XXxxxLLLL
```

Il est facile de remplacer la première ligne puisque je connais l’ID, mais comment faire pour sortir (supprimer) la ligne suivante en plus de celle qui est en commentaire ?

En gros je veux sortir les 2 lignes (Commentaire+texte) qui appartiene à un ID précis.

Merci pour votre aide 😉

---

<div class="post-metadata">

**Author:** ![ben\_raven](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ben_raven/32/4076_2.png) [@ben\_raven](https://www.debian-fr.org/u/ben_raven)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/enlever-uniquement-deux-lignes-dans-un-fichier-avec-bash/58894/2 "2016-02-21T18:03:26Z")

</div>

J’utiliserai une expression régulière.  
S’il y a des pros dans la salle ? ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")

---

<div class="post-metadata">

**Author:** ![ben\_raven](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ben_raven/32/4076_2.png) [@ben\_raven](https://www.debian-fr.org/u/ben_raven)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/enlever-uniquement-deux-lignes-dans-un-fichier-avec-bash/58894/3 "2016-02-21T18:03:26Z")

</div>

“sortir ces lignes” c’est supprimer du fichier ou extraire ces données du fichier pour être réutilisées ?

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/enlever-uniquement-deux-lignes-dans-un-fichier-avec-bash/58894/4 "2016-02-21T18:03:27Z")

</div>

Je veux les supprimer du fichier.

Avec SED il est possible de se positionner sur une ligne, par contre je ne sais pas comment récupèrer le numéro de ligne en question ![:doh:](https://www.debian-fr.org/uploads/default/original/1X/78536cf08b5cbccb06a10e44ddb8da50bfc1554d.gif "Doh!")

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/enlever-uniquement-deux-lignes-dans-un-fichier-avec-bash/58894/5 "2016-02-21T18:03:27Z")

</div>

Je pense avoir trouvé en faisant comme ça :

```auto

```

Quelqu’un a plus rapide et plus simple ?

---

<div class="post-metadata">

**Author:** ![ben\_raven](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ben_raven/32/4076_2.png) [@ben\_raven](https://www.debian-fr.org/u/ben_raven)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/enlever-uniquement-deux-lignes-dans-un-fichier-avec-bash/58894/6 "2016-02-21T18:03:27Z")

</div>

Voilà comment je ferai avec un fichier du style placé dans /mnt/TEST :

`mdr
mdr
lol
wtf
mdr
wtf`

Disons que je veux trouver la ligne contenant lol et la supprimer. Pour cela je ferai :

`#!/bin/bash
FICHIER=/mnt/TEST
VALUE="$(/bin/grep -n 'lol' $FICHIER)"
NUMBER="$(/usr/bin/awk -F ":" '{print $1}' <<<"$VALUE" )"`

Ainsi ta variable NUMBER contient le numéro de ta ligne contenant “lol”.  
Il ne te reste plus qu’à la supprimer avec sed.

Mais je ne sais pas comment placer le resultat de la variable NUMBER dans sed.

---

<div class="post-metadata">

**Author:** ![haleth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/ecc23a/32.png) [@haleth](https://www.debian-fr.org/u/haleth)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/enlever-uniquement-deux-lignes-dans-un-fichier-avec-bash/58894/7 "2016-02-21T18:03:37Z")

</div>

Deux solutions simples et rapides:

```auto
awk '/ID:145/ {getline; next} {print}' file
sed -n '/^#ID:145/,+1!p' file
```
