Chci zobrazit všechny řádky před zápasem, nejen například 10 nebo 7 nebo 14, jak je vysvětleno v části Jak mohu načíst řádky před/po výsledku grep v bash?.
Jak to mohu udělat? Nezáleží na tom, zda je odpovídající řádek zahrnut nebo ne.
Například místo:
... | grep -B 10 -- "foo"
Chci:
... | grep -B -- "foo"
Ale tento poslední kód nefunguje.
Přijatá odpověď:
-
Včetně zápasu,
sed '/foo/q' file
Je lepší q použijte
sed
jakmile je nalezena shoda, jinaksed
by pokračoval ve čtení souboru a ztrácel čas, což by bylo značné u velkých souborů. -
S výjimkou zápasu,
sed -n '/foo/q;p' file
-n
příznak znamená, že pouze řádky, které dosáhnoup
příkaz bude vytištěn. Protožefoo
řádek spouštíq
uit akce, nedosahujep
a proto se nevytiskne.-
Pokud váš
sed
je GNU, lze to zjednodušit nased '/foo/Q' file
-
Odkazy
/foo/
— Adresyq
,p
— Často používané příkazyQ
— Rozšířené příkazy GNU Sed-n
— Možnosti příkazového řádku