GNU/Linux >> Znalost Linux >  >> Ubuntu

Zobrazit všechny řádky před zápasem?

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, jinak sed 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áhnou p příkaz bude vytištěn. Protože foo řádek spouští q uit akce, nedosahuje p a proto se nevytiskne.

    • Pokud váš sed je GNU, lze to zjednodušit na

      sed '/foo/Q' file
      

Odkazy

  1. /foo/ — Adresy
  2. q , p — Často používané příkazy
  3. Q — Rozšířené příkazy GNU Sed
  4. -n — Možnosti příkazového řádku

Ubuntu
  1. sed začátečník:změna všech výskytů ve složce

  2. vložit pouze na první zápas

  3. Odstraňte prázdné řádky pomocí sed

  1. Zobrazit všechny soubory až do shody?

  2. Sed:Vytisknout pouze první výskyt shody vzoru?

  3. sed - vložit řádek za X řádků po shodě

  1. Jak odstranit všechny řádky souboru ve Vimu

  2. sed spojí čáry dohromady

  3. grep odpovídá pouze řádkům v určeném rozsahu