Je souhaite afficher toutes les lignes avant une correspondance, pas seulement 10, 7 ou 14 par exemple, comme expliqué dans Comment récupérer les lignes avant/après le résultat de grep dans bash ?.
Comment puis-je le faire? Peu importe si la ligne correspondante est incluse ou non.
Par exemple, au lieu de :
... | grep -B 10 -- "foo"
Je veux :
... | grep -B -- "foo"
Mais ce dernier code ne fonctionne pas.
Réponse acceptée :
-
Y compris le match,
sed '/foo/q' fileIl vaut mieux q uit
seddès qu'une correspondance est trouvée, sinonsedcontinuerait à lire le fichier et vous ferait perdre du temps, ce qui serait considérable pour les fichiers volumineux. -
Hors match,
sed -n '/foo/q;p' fileLe
-nflag signifie que seules les lignes qui atteignent lepcommande sera imprimée. Depuis lefoola ligne déclenche lequit action, elle n'atteint paspet n'est donc pas imprimé.-
Si votre
sedest GNU, cela peut être simplifié ensed '/foo/Q' file
-
Références
/foo/— Adressesq,p— Commandes souvent utiliséesQ— Commandes étendues GNU Sed-n— Options de ligne de commande