Ack je lepšia ako grep

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 je lepšia ako grep

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+"'

Ack je lepšia ako grep

Ú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.

Ack je lepšia ako grep
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

Ack je lepšia ako grep

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

Ack je lepšia ako grep

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/

Ack je lepšia ako grep

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

Ack je lepšia ako grep

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+'

Ack je lepšia ako grep

Zložitejší príklad

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

Ack je lepšia ako grep

Č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+]'

Ack je lepšia ako grep

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 je lepšia ako grep

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

Ack je lepšia ako grep

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

Ack je lepšia ako grep

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.

Ack je lepšia ako grep

Práca so súbormi

Získať zoznam súborov s určitými príponami

ack -f --js

Ack je lepšia ako grep

Nájsť všetky js súbory, ktorých názvy začínajú na P*, pomocou možnosti (-g).

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

Ack je lepšia ako grep

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=dist

Pridáme vlastný typ súboru —vue.

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

Teraz 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 -y

Ubuntu

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

Mac OS

brew update && brew install ack

Inštalácia zo stránky

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

Pluginy pre editory:

Záver

Toto nie sú všetky možnosti. Celý zoznam funkcií si môžete pozrieť vykonaním:

ack –-help
# alebo
ack --man

Ná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

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster