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' file
Il vaut mieux q uit
sed
dès qu'une correspondance est trouvée, sinonsed
continuerait à 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' file
Le
-n
flag signifie que seules les lignes qui atteignent lep
commande sera imprimée. Depuis lefoo
la ligne déclenche leq
uit action, elle n'atteint pasp
et n'est donc pas imprimé.-
Si votre
sed
est 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