Ack je lepší než grep

Chci vám říci o jednom vyhledávacím nástroji, který výrazně zjednodušuje život. Když se dostanu na server a potřebuji něco hledat, první věc, kterou udělám, je zkontrolovat, zda je nainstalováno ack. Tento nástroj je vynikající náhradou za grep, stejně jako find a wc do určité míry. Proč ne grep? Ack má hezčí nastavení hned po vybalení, více čitelných možností, regulární výraz perl a konfigurační systém. Pokud rádi (musíte) hledat v terminálu, pak byste to měli určitě vyzkoušet.

Základní vlastnosti

Ack je ve výchozím nastavení rekurzivní a psát méně možností je vždy dobrý nápad.

Můžeme použít vlajku -wříci nástroji, aby hledal instanci našeho vzoru obklopenou hranicemi slov (mezery, lomítka atd.).

ack -w mysql

Ack je lepší než grep

Ack podporuje vyhledávání podle typu souboru. Najdeme například verzi modulu v souborech json.

ack --json '"version":s+"d+.d+.d+"'

Ack je lepší než grep

Úplný seznam podporovaných typů souborů lze zobrazit pomocí:

ack --help-types

Často potřebujete spočítat, kolikrát se fráze objeví v souboru protokolu, například abyste pochopili, kolik dat skript zpracoval.

Ack je lepší než grep
Počítáme, kolikrát se proces vyskytuje v souboru test.log, bez ohledu na velikost písmen (-i).

Můžeme počítat výskyty nejen v jednom konkrétním souboru, ale ve skupině. Dokončeme předchozí hledání slova mysql: spočítejte počet výskytů slov (-s) v souborech *.js(--js), s výjimkou souborů, ve kterých nebylo nic nalezeno (-h) a shrnout výsledek.

# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql

Ack je lepší než grep

Kromě toho můžeme získat podrobnou zprávu o počtu výskytů v každém souboru pomocí (-l)

ack --js -w -cl mysql

Ack je lepší než grep

Pokud pro své vyhledávání potřebujete další kontext, můžete požádat o potvrzení
zobrazit řádky až (-B) a po (-A) nalezeného výrazu. Chcete-li to provést, musíte za volbou zadat počet řádků, které je třeba zobrazit.

# 2 строки до 
ack --js --column -B 2 "query.once('" ./lib/

Ack je lepší než grep

# 2 строки после 
ack --js --column -A 2 "query.once('" . /lib/

Ack je lepší než grep

A pokud potřebujete obojí, použijte (-S)

ack --js --column -C 2 "query.once('" ./lib/

Existuje také možnost (-v) invertovat vyhledávání, tj. zobrazit řádky, které neobsahují daný vzor.

Regulární výraz

Ack, na rozdíl od grep, používá výrazy kompatibilní s Perl.
Pro mě je to velké plus; nemusím si pamatovat samostatnou syntaxi regulárních výrazů.

ack 'vars+adds+'

Ack je lepší než grep

Složitější příklad

ack '*s+[vd+.d+.d+]'

Ack je lepší než grep

Často chcete ve výsledcích ponechat pouze to, co odpovídá šabloně. Zde pomůže volba --output (-o)

ack -o '*s+[vd+.d+.d+]'

Ack je lepší než grep

Navíc pomocí závorek můžeme vybrat nalezený díl a přistupovat k němu ve výstupu přes proměnnou $[číslo skupiny]. Například,

ack --output='version is $1' '*s+[v(d+.d+.d+)]'

Ack je lepší než grep

Ack má užitečné možnosti --range-start и --konec rozsahu. Pomáhají, když
Data nejsou uložena v jednom řádku, ale ve víceřádkové podobě.

Existuje například soubor s kódem SQL

Ack je lepší než grep

Pojďme extrahovat názvy sloupců. Začátek bloku bude řádek začínající SELECT a konec bude řádek začínající FROM.

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql

Ack je lepší než grep

Pokud hledaný výraz obsahuje speciální znaky, jako je tečka, závorka a další, pak, abyste je neunikli pomocí , můžete použít možnost -Q.

# Поиск с экранированием 
ack --json 'mysql.'    
# Поиск без экранирования
ack --json -Q mysql.

Ack je lepší než grep

Práce se soubory

Získejte seznam souborů s konkrétní příponou

ack -f --js

Ack je lepší než grep

Najděte všechny soubory js, jejichž název začíná na P* pomocí možnosti (-g).

ack -g --js '/Pa.+.js$'

Ack je lepší než grep

Konfigurace

Nástroj má svůj vlastní konfigurační soubor. Můžete mít jak globální konfiguraci pro uživatele (~/.ackrc), tak místní konfiguraci pro konkrétní složku (ve složce musíte vytvořit soubor .ackrc).

Většinu voleb, které jsou zapsány v konfiguracích, lze při volání zadat ručně. Pojďme se na pár z nich podívat.

Ignorovat složku při hledání

--ignore-dir=dist

Pojďme přidat vlastní typ souboru -vue.

--type-add=vue:ext:js,vue

Nyní můžete k prohledávání souborů použít volbu --vue .vue. Například: ack --vue App.
Pro tuto možnost můžete zadat seznam přípon. Například zde, při použití -vue, bude zpracováno následující:
soubory .js.

Ignorujte soubory, například minifikované *.min.js

--ignore-file=match:/.min.js$/

Instalace

CentOS

yum update -y && yum install ack -y

ubuntu

apt-get update -y && apt-get install ack-grep -y

Mac OS

brew update && brew install  ack

Instalace z webu

curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack

Pluginy pro editory:

Závěr

To nejsou všechny možnosti. Úplný seznam funkcí lze zobrazit spuštěním:

ack –-help
# или
ack --man

Nástroj ack vám umožní pohodlnější a flexibilnější vyhledávání v terminálu. A pomocí potrubí (ack -C 10 ahoj | ack svět) můžete vytvořit výkonnou kombinaci pro vyhledávání a filtrování dat v systému souborů a v souborech samotných.

Zdroj: www.habr.com

Přidat komentář