GNU/Linux >> Znalost Linux >  >> Linux

Shoda víceřádkového vzoru pomocí Sed, Awk nebo Grep?

Tato otázka zde již obsahuje odpovědi :Jak mohu „grep“ vzory přes více řádků?

(9 odpovědí)
Uzavřeno před 2 lety.

Je možné provést shodu víceřádkového vzoru pomocí sed , awk nebo grep ? Vezměme si například, chtěl bych získat všechny řádky mezi { a }

Takže by to mělo být schopné odpovídat

 1. {}
 2. {.....}
 3. {.....
.....}

Zpočátku otázka používala <p> jako příklad. Upravili otázku tak, aby používala { a} .

Přijatá odpověď:

I když souhlasím s výše uvedenou radou, že si budete chtít pořídit analyzátor na cokoli víc než na drobné nebo zcela ad-hoc, je (sotva 😉 možné spárovat víceřádkové bloky mezi složenými závorkami se sed.

Zde je ladicí verze kódu sed

sed -n '/[{]/,/[}]/{
    p
    /[}]/a
     end of block matching brace

    }' *.txt

Několik poznámek,

  • -n znamená „žádné výchozí tiskové řádky při zpracování“.
  • „p“ znamená teď vytisknout řádek.
  • Konstrukt /[{]/,/[}]/ je rozsahový výraz. Znamená to skenovat, dokud nenajdete něco, co odpovídá prvnímu vzoru (/[{]/) A pak skenujte, dokud nenajdete 2. vzor (/[}]/) PAK proveďte jakoukoli akci, kterou najdete mezi { } v kódu sed. V tomto případě „p“ a ladicí kód. (není zde vysvětleno, použijte jej, upravte jej nebo jej vyjměte, jak vám nejlépe vyhovuje).

Konec /[}]/a ladění bloku můžete odstranit, když ke své spokojenosti prokážete, že kód skutečně odpovídá blokům odděleným {,}.

Tato ukázka kódu přeskočí vše, co není uvnitř páru složených závorek.
Jak poznamenali ostatní výše, bude to snadno zmatené, pokud budete mít nějaké další {,} vložené do řetězců, reg-exps atd., NEBO kde uzavírací složená závorka je stejná čára , (s díky fred.bear)

Doufám, že to pomůže.


Linux
  1. Nahrazení vzoru po N-té shodě se najde na každém řádku?

  2. Najít pouze první výskyt pouze pomocí Grepu?

  3. Jak mohu vyhledat víceřádkový vzor v souboru?

  1. Jaké jsou rozdíly mezi grep, awk a sed?

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

  3. Použití grep vs awk

  1. Pomocí Sed k vyhledání a nahrazení čáry mezi rozsahy vzorů

  2. Vytisknout předchozí řádek po shodě vzoru pomocí Sed?

  3. Použití sed k nahrazení mezi konkrétním vzorem