Supprimer les lignes après le premier match

Dec 31 2020

Je dois supprimer toutes les lignes après la première ligne qui contient le mot «renard»

Disons par exemple pour le fichier d'entrée suivant "in.txt"

The quick
brown fox jumps
over
the
lazy dog
the second fox
is hunting

Le résultat sera

The quick
brown fox jumps

Je préfère un script fait en awk ou sed mais tous les autres outils de ligne de commande sont bons, comme perl ou php ou python etc.

À des fins de recherche, j'ajouterai cette ligne:

Supprimer les lignes après l'occurrence

Modifier plus tard:

J'utilise les outils gnuwin32 dans Windows, et la solution que j'ai pu trouver était celle-ci:

grep -m1 -n fox in.txt | cut -f1 -d":" > var.txt
set /p MyNumber=<var.txt
head -%MyNumber% in.txt > out.txt

Cependant, je recherche une solution plus courte et portable (celle-ci contient la commande spécifique à Windows "set / p"

Questions similaires:

  • Comment supprimer toutes les lignes après la dernière occurrence du motif?

  • Comment supprimer des lignes avant qu'un match ne le conserve?

  • Supprimer toutes les lignes avant un match avec sed

  • Comment supprimer les lignes à partir de la 1ère ligne jusqu'à la ligne avant de rencontrer le motif '[ERROR] -17-12-2015' en utilisant sed?

  • Comment supprimer toutes les lignes avant la première et après la dernière occurrence d'une chaîne?

Réponses

3 Cyrus Dec 31 2020 at 03:59
awk '{print} /fox/{exit}' file

Avec GNU sed:

sed '0,/fox/!d' file

ou alors

sed -n '0,/fox/p' file