Enlever uniquement deux lignes dans un fichier avec BASH

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 :

#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 :wink:

J’utiliserai une expression régulière.
S’il y a des pros dans la salle ? :mrgreen:

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

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:

Je pense avoir trouvé en faisant comme ça :

Quelqu’un a plus rapide et plus simple ?

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.

Deux solutions simples et rapides:

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