Ack místo grep

Chci se podělit o jednu utilitu pro vyhledávání, která výrazně usnadňuje život. Když se dostanu na server a potřebuji něco vyhledat, nejdříve zkontroluji, zda je nainstalován ack. Tato utilita je skvělou alternativou k grep a do určité míry také k find a wc. Proč ne grep? Ack má příjemnější výchozí nastavení, čitelnější možnosti, perl regulární výrazy a systém konfigurací. Pokud máte rádi (nebo musíte) vyhledávat přes terminál, určitě byste to měli vyzkoušet.

Základní možnosti

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

Můžeme použít příznak -w, abychom utilitě řekli, aby hledala výskyt našeho vzoru, obklopeného hranicemi slov (bílými znaky, lomítkem atd.).

ack -w mysql

Ack místo grep

Ack podporuje vyhledávání podle typu souboru. Například, najdeme verzi modulu v souborech json.

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

Ack místo grep

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

ack --help-types

Často je nutné spočítat, kolikrát se fráze vyskytuje v log souboru, například abychom pochopili, kolik dat skript zpracoval.

Ack místo grep
Spočítáme, kolikrát se slovo process 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 i ve skupině. Upravíme předchozí vyhledávání slova mysql: spočítáme počet výskytů slov (-c) v *.js souborech (--js), s vyloučením souborů, ve kterých nebylo nic nalezeno (-h) a sečteme celkový výsledek.

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

Ack místo 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 místo grep

Pokud potřebujete další kontext pro vyhledávání, můžete požádat ack
aby zobrazil řádky před (-B) a po (-A) nalezeném výrazu. K tomu je třeba uvést počet řádků, které je nutné zobrazit, za možností.

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

Ack místo grep

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

Ack místo grep

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

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

Existuje také možnost (-v) pro inverzi vyhledávání, tedy zobrazit řádky, ve kterých se nenachází daný vzor.

Regulární výrazy

Ack na rozdíl od grep používá perl-kompatibilní výrazy.
Pro mě je to velké plus, nemusím si pamatovat zvláštní syntaxi pro regulární výrazy.

ack 'vars+adds+'

Ack místo grep

Složitější příklad

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

Ack místo grep

Často chcete v výstupech ponechat pouze to, co odpovídá vzoru. Pomůže zde možnost —output (-o)

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

Ack místo grep

Kromě toho můžeme pomocí kulatých závorek vyjmout nalezenou část a odkazovat na ni v outputu prostřednictvím proměnné $[číslo skupiny]. Například,

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

Ack místo grep

Ack má užitečné možnosti —range-start a —range-end. Pomáhají, když
data nejsou uložena v jedné řádce, ale v multiline formátu.

Například, máme soubor s sql kódem

Ack místo grep

Vytáhneme názvy sloupců. Začátek bloku bude řádek začínající na SELECT, a konec bude řádek začínající na FROM.

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

Ack místo grep

Pokud se ve vyhledávacím výrazu používají speciální znaky jako tečka, kulaté závorky a další, lze je místo escapování použít s možností -Q.

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

Ack místo grep

Práce se soubory

Získat seznam souborů s určitým příponou

ack -f --js

Ack místo grep

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

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

Ack místo grep

Konfigurace

Nástroj má svůj konfigurační soubor. Může existovat jak globální konfigurace pro uživatele (~/.ackrc), tak lokální pro konkrétní složku (ve složce je třeba vytvořit soubor .ackrc).

Většinu možností, které jsou uvedeny v konfiguracích, lze také zadávat manuálně při volání. Prozkoumávejme některé z nich.

Ignorovat složku při vyhledávání

--ignore-dir=dist

Přidáme vlastní typ souboru —vue.

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

Nyní lze použít možnost —vue k vyhledávání v souborech .vue. Například: ack —vue App.
Přitom lze uvést seznam přípon pro tuto možnost. Například při použití —vue budou zpracovány také
.js soubory.

Игнорировать файлы, например, минифицированные *.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 rozhodně nejsou všechny možnosti. Úplný seznam funkcí lze zobrazit spuštěním:

ack --help
# nebo
ack --man

Nástroj ack umožňuje usnadnit a zefektivnit vyhledávání v terminálu. A pomocí pipeline (ack -C 10 hello | ack world) lze vytvořit mocný stroj na vyhledávání a filtrování dat v souborovém systému a v samotných souborech.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster