GNU/Linux >> Znalost Linux >  >> Linux

Jak grepovat řádky, které mají více než určitý počet speciálních znaků

Řešení v Perlu:

perl -ne 'print if tr/,// > 4'
  • -n přečte soubor řádek po řádku
  • operátor tr vrátí počet shod.

Chcete-li vytisknout řádky s méně než 4, stačí změnit > do < .


Pomocí grep příkaz:

grep -E '(,.*){5}' myfile

dělá práci. Vysvětlení:

-E :použijte rozšířený regulární výraz...

'(,.*) :... najít jednu čárku následovanou libovolným počtem znaků, dokonce i nulou...

{5}' :... a 5krát opakujte předchozí vzor.

Pokud chcete grepovat řádky s méně než 4 čárkami, budete potřebovat:

grep -xE '([^,]*,){0,3}[^,]*' myfile

Tentokrát potřebujeme -x takže vzor je ukotven jak na začátku, tak na konci řádku, takže odpovídá celé čáře. A my používáme [^,]* místo .* protože ten by jinak šťastně odpovídal řetězcům obsahujícím , s jako . odpovídá jakémukoli postava.

Dalším přístupem je obrácení pomocí -v předchozí přístup. „Méně než 4“ je totéž jako ne "nejméně 4", takže:

grep -vE '(,.*){4}' myfile

awk verze:

awk -F, 'NF > 5' myfile

Linux
  1. Jak pomocí příkazu Linux „cat“ zobrazit pouze určité řádky podle čísla?

  2. Linux – Jak šáhnout po konkrétním slovu a uchopit text?

  3. Jak spočítat počet řádků v souboru po zápase Grep?

  1. Jak počítat počet řádků v souboru v Linuxu (příklady wc a nl)

  2. Jak zřetězit více řádků výstupu do jednoho řádku?

  3. Jak psát speciální znaky v Linuxu?

  1. Jak Grep linky, které nezačínají "#" nebo ";"?

  2. Jak zobrazit konkrétní řádky souboru v příkazovém řádku Linuxu

  3. Počítání celkového počtu shod s grep místo toho, kolik řádků odpovídá