2010-01-13 9 views
1

OK Je trouve cette question:Utilisez sed pour supprimer une expression rationnelle est reconnue et la ligne (ou deux) en dessous

How do I delete a matching line, the line above and the one below it, using sed?

et juste passé la dernière heure à essayer d'écrire quelque chose qui va correspondre à une chaîne et supprimer la ligne contenant la chaîne et la ligne en dessous (ou une variante - supprimer 2 lignes en dessous). Je sens que je suis en train de taper des chaînes aléatoires. S'il te plaît, aide-moi quelqu'un.

+0

Est-ce que ce doit être une seule commande sed? –

+0

J'ai réussi à le faire en 2 commandes sed maintenant: sed '/ XYZ/{n /ÉTAT/d}' | sed '/ XYZ/d' qui fonctionne :) mais maintenant je suis curieux si cela peut être fait dans un –

Répondre

4

Si j'ai compris que correctement, pour supprimer la ligne de correspondance et une ligne après

/matchstr/{N;d;} 

ligne Match et deux lignes après

/matchstr/{N;N;d;} 
  • N apporte dans la ligne suivante
  • d - supprime la ligne unique résultante
+1

Votre commande fonctionnera sans remplacer les nouvelles lignes, faites simplement '/ matchstr/{N; d}' ou '/ matchstr/{N; N; d}' –

+0

@Dennis - Donc c'est le cas. Je vais faire ce montage. THX. –

0

vous pouvez utiliser awk. par exemple rechercher le mot "deux" et sauter 2 lignes après cela

$ cat file 
one 
two 
three 
four 
five 
six 
seven 
eight 
$ awk -vnum=2 '/two/{for(i=0;i<=num;i++)getline}1' file 
one 
five 
six 
seven 
eight