Chcem sa podeliť o jednu utilitu na vyhľadávanie, ktorá veľmi uľahčuje život. Keď sa dostanem na server a potrebujem niečo vyhľadať, najprv kontrolujem, či je nainštalovaný ack. Táto utilita je skvelou náhradou za grep, ako aj do určitej miery za find a wc. Prečo nie grep? Ack má z výroby príjemnejšie nastavenia, čitateľnejšie možnosti, Perl regulárne výrazy a systém konfigurácií. Ak máte radi (musíte) vyhľadávať cez terminál, rozhodne by ste ju mali vyskúšať.
Základné možnosti
Ack je predvolený rekurzívny, a je vždy dobré písať menej možností.
Môžeme použiť prapor -w, aby sme utilite povedali, že má hľadať vzor obklopený hranicami slov (priestorovými znakmi, lomítkom atď.).
ack -w mysql
Ack podporuje vyhľadávanie podľa typu súborov. Napríklad nájdeme verziu modulu v json súboroch.
ack --json '"version":s+"d+.d+.d+"'
Úplný zoznam podporovaných typov súborov si môžete pozrieť pomocou:
ack --help-typesČasto je potrebné spočítať, koľkokrát sa fráza vyskytuje v log súbore, napríklad na pochopenie, koľko údajov spracoval skript.
![]()
Spočítajme, koľkokrát sa proces objavuje v súbore test.log, bez ohľadu na veľkosť písmen (-i).
Môžeme počítať výskyty nie len v jednom konkrétnom súbore, ale v skupine. Rozširujeme predchádzajúce vyhľadávanie slova mysql: spočítame počet výskytov slov (-c) v *.js súboroch (—js), vylúčujúc súbory, v ktorých sa nič nenašlo (-h) a sčítaním výsledku.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Okrem toho môžeme získať podrobnú správu o počte výskytov v každom súbore pomocou (-l)
ack --js -w -cl mysql
Ak potrebujete ďalší kontext pre vyhľadávanie, môžete požiadať ack
aby zobrazila riadky pred (-B) a po (-A) nájdenom výraze. Na to je potrebné uviesť po možnosti počet riadkov, ktoré chcete zobraziť.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
A ak potrebujete to aj to, použite (-C)
ack --js --column -C 2 "query.once('" .\/lib\/Existuje aj možnosť (-v) na inverziu vyhľadávania, t.j. zobrazovať riadky, v ktorých nie je zadaný vzor.
Regulárne výrazy
Ack na rozdiel od grepu používa Perl kompatibilné výrazy.
Pre mňa je to veľké plus, nemusím si pamätať samostatnú syntax pre regulárne výrazy.
ack 'vars+adds+'
Zložitejší príklad
ack '*s+[vd+.d+.d+]'
Často chceme v výsledkoch nechať len to, čo sa zhoduje s vzorom. Tu pomôže možnosť —output (-o)
ack -o '*s+[vd+.d+.d+]'
Navyše, pomocou okrúhlych zátvoriek môžeme vyznačiť nájdenú časť a odkázať sa na ňu v výstupe prostredníctvom premennej $[číslo skupiny]. Napríklad,
ack --output='verzia je $1' '*s+[v(d+.d+.d+)]'
Ack má užitočné možnosti —range-start a —range-end. Pomáhajú, keď
údaje sú uložené nie v jednej riadku, ale v viacerých riadkoch.
Napríklad, existuje súbor s sql kódom

Extrahujeme názvy stĺpcov. Začiatok bloku bude riadok začínajúci na SELECT a koniec riadok začínajúci na FROM.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Ak sa vo vyhľadávacom výraze zúčastňujú špeciálne znaky ako bodka, okrúhla zátvorka a iné, tak na ich nechránenie pomocou , možno použiť možnosť -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Práca so súbormi
Získať zoznam súborov s určitými príponami
ack -f --js
Nájsť všetky js súbory, ktorých názvy začínajú na P*, pomocou možnosti (-g).
ack -g --js ' /Pa.+.js$'
Konfigurácia
Nástroj má svoj konfiguračný súbor. Môžeme mať globálny konfig pre používateľa (~/.ackrc) aj lokálny pre konkrétnu zložku (v zložke je potrebné vytvoriť súbor .ackrc).
Väčšinu možností, ktoré sú uvedené v konfiguračných súboroch, je možné zadať aj manuálne pri vyvolaní. Rozoberieme niektoré z nich.
Ignorovať zložku pri vyhľadávaní
--ignore-dir=distPridáme vlastný typ súboru —vue.
--type-add=vue:ext:js,vueTeraz môžeme použiť možnosť —vue, na hľadanie v súboroch .vue. Napríklad: ack —vue App.
Pri tom môžeme uviesť zoznam prípon pre túto možnosť. Napríklad, tu pri použití —vue budú spracované aj .js súbory.
Игнорировать файлы, например, минифицированные *.min.js
--ignore-file=match:/.min.js$/Inštalácia
CentOS
yum update -y && yum install ack -yUbuntu
apt-get update -y && apt-get install ack-grep -yMac OS
brew update && brew install ackInštalácia zo stránky
curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ackPluginy pre editory:
Záver
Toto nie sú všetky možnosti. Celý zoznam funkcií si môžete pozrieť vykonaním:
ack –-help
# alebo
ack --manNástroj ack umožňuje urobiť vyhľadávanie v termináli pohodlnejšie a flexibilnejšie. A pomocou pipeline (ack -C 10 hello | ack world) môžete vytvoriť mocný kombajn na vyhľadávanie a filtrovanie údajov v súborovom systéme a v samotných súboroch.
Zdroj: habr.com
