Szeretnék mesélni egy keresőeszközről, amely jelentősen megkönnyíti az életet. Amikor egy szerverre lépek, és valamit keresnem kell, első dolgom, hogy ellenőrizzem, telepítve van-e az ack. Ez az eszköz kiváló alternatívája a grep-nek, valamint bizonyos mértékig a find-nak és a wc-nek. Miért nem grep? Az ack sokkal kényelmesebb alapértelmezett beállításokkal rendelkezik, emberibb olvasási lehetőségekkel, perl-jellegű reguláris kifejezésekkel és konfigurációs rendszert kínál. Ha szeretsz (vagy kell) keresni a terminálon, mindenképpen érdemes kipróbálnod.
Alapvető funkciók
Az ack alapértelmezés szerint rekurzív, és mindig jó kevesebb opciót írni.
Használhatjuk a zászlót -w, hogy megmondjuk az eszköznek, hogy keressen példányt a sablonunkból, amelyet szavak határolnak (belső szünetek, perjel stb.).
ack -w mysql
Az ack támogatja a fájltípusok szerinti keresést. Például keressük meg a modul verzióját json fájlokban.
ack --json '"version":s+"d+.d+.d+"'
A támogatott fájltípusok teljes listáját a következő parancs segítségével nézhetjük meg:
ack --help-typesGyakran meg kell számolni, hányszor fordul elő egy kifejezés egy naplófájlban, például hogy megnézzük, mennyi adatot dolgozott fel a szkript.
![]()
Számoljuk meg, hányszor fordul elő a process a test.log fájlban, figyelmen kívül hagyva a kis- és nagybetűs eltérést (-i).
Nemcsak egy konkrét fájlban, hanem egy csoportban is számolhatunk előfordulásokat. Fejleszthetjük a korábbi mysql keresést: számoljuk meg a szavak előfordulásainak számát (-c) *.js fájlokban (—js), kizárva azokat a fájlokat, amelyekben nincs találat (-h) és összesítve az eredményt.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Továbbá részletes jelentést is kaphatunk az egyes fájlok előfordulásainak számáról a következő paranccsal (-l)
ack --js -w -cl mysql
Ha további kontextusra van szükséged a kereséshez, kérheted az ack-tól, hogy
mutassa meg a találat előtti (-B) és utáni (-A) sorokat. Ehhez meg kell adni az opció után, hogy hány sort szeretnél látni.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
Ha pedig mindkét dolgot szeretnéd, használd (-C)
ack --js --column -C 2 "query.once('" . /lib/Van egy opció is (-v) a keresés megfordítására, azaz olyan sorok megjelenítésére, amelyek nem tartalmazzák a megadott sablont.
Reguláris kifejezés
Az ack a grep-pel ellentétben Perl-kompatibilis kifejezéseket használ.
Számomra ez nagy előny, így nem kell külön szintaxist megjegyeznem a reguláris kifejezésekhez.
ack 'vars+adds+'
Bonyolultabb példa
ack '*s+[vd+.d+.d+]'
Gyakran szeretnénk, hogy az eredményekben csak azokat tartsuk meg, amelyek egyeznek a sablonnal. Itt segít az —output opció (-o)
ack -o '*s+[vd+.d+.d+]'
Mindenekelőtt a zárójelek segítségével kiemelhetjük a megtalált részt, és a $[csoport szám] változón keresztül hivatkozhatunk rá az outputban. Például,
ack --output='a verzió $1' '*s+[v(d+.d+.d+)]'
Az ack hasznos opciókkal rendelkezik. —range-start és —range-end. Ezek segítenek, amikor
az adatok nem egy sorban, hanem több sorban tárolódnak.
Például van egy sql kódot tartalmazó fájlunk.

Kinyerjük az oszlopneveket. A blokk elejét a SELECT kezdetű sor, a végét pedig a FROM kezdetű sor jelöli.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Ha a keresési kifejezésben speciális karakterek szerepelnek, mint például a pont, zárójel és mások, akkor hogy ne kelljen ezeket escapingelni, használhatjuk az opciót -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Munka a fájlokkal
Fájlok listájának beszerzése adott kiterjesztéssel.
ack -f --js
Minden js fájlt keresünk, amelynek neve P* -tól kezdődik, a ( opcióval.-g).
ack -g --js '/Pa.+.js$'
Konfiguráció
A segédprogramnak saját konfigurációs fájlja van. Lehet globális konfig a felhasználónak (~/.ackrc) és helyi konfiguráció egy adott mappához (a mappában .ackrc fájlt kell létrehozni).
A legtöbb opciót, amelyet a konfigurációkban megadunk, kézi úton is megadhatjuk a hívás során. Vizsgáljunk meg párat közülük.
Mappa figyelmen kívül hagyása a keresés során.
--ignore-dir=distAdjunk hozzá egy egyedi fájltípust —vue.
--type-add=vue:ext:js,vueMostantól használhatjuk a —vue opciót a .vue fájlok keresésére. Például: ack —vue App Ezenkívül megadhatunk egy kiterjesztések listáját ehhez az opcióhoz. Például itt a —vue használatakor a .js fájlokat is feldolgozzák..
.js fájlok. --ignore-file=match:/.min.js$/
Игнорировать файлы, например, минифицированные *.min.js
yum update -y && yum install ack -yTelepítés
CentOS
apt-get update -y && apt-get install ack-grep -yUbuntu
Mac OSbrew update && brew install ack
Telepítés a weboldalrólcurl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack
Szerkesztők pluginjai:Sublime Text
Zárás
ack --help # vagy ack --man
Az ack segédprogram lehetővé teszi, hogy a terminálban kényelmesebbé és rugalmasabbá váljon a keresés. A pipeline segítségével (ack -C 10 hello | ack world) egy hatékony data filtering és keresési rendszert hozhatunk létre a fájlrendszerben és magukban a fájlokban.Távoli kihasználhatóság a qmail levelezőszerverben.
Forrás: habr.com
