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 podporuje vyhledávání podle typu souboru. Například, najdeme verzi modulu v souborech json.
ack --json '"version":s+"d+.d+.d+"'
Ú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.
![]()
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
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
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/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
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+'
Složitější příklad
ack '*s+[vd+.d+.d+]'
Č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+]'
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á 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

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
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.
Práce se soubory
Získat seznam souborů s určitým příponou
ack -f --js
Najít všechny js soubory, jejichž název začíná na P*, pomocí možnosti (-g).
ack -g --js '/Pa.+.js$'
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=distPřidáme vlastní typ souboru —vue.
--type-add=vue:ext:js,vueNyní 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 -yUbuntu
apt-get update -y && apt-get install ack-grep -yMac OS
brew update && brew install ackInstalace z webu
curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ackPluginy 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 --manNá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
