Az ack jobb, mint a grep

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 jobb, mint a grep

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

Az ack jobb, mint a grep

A támogatott fájltípusok teljes listáját a következő parancs segítségével nézhetjük meg:

ack --help-types

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

Az ack jobb, mint a grep
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

Az ack jobb, mint a grep

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

Az ack jobb, mint a grep

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/

Az ack jobb, mint a grep

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

Az ack jobb, mint a grep

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

Az ack jobb, mint a grep

Bonyolultabb példa

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

Az ack jobb, mint a grep

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

Az ack jobb, mint a grep

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 jobb, mint a grep

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.

Az ack jobb, mint a grep

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

Az ack jobb, mint a grep

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.

Az ack jobb, mint a grep

Munka a fájlokkal

Fájlok listájának beszerzése adott kiterjesztéssel.

ack -f --js

Az ack jobb, mint a grep

Minden js fájlt keresünk, amelynek neve P* -tól kezdődik, a ( opcióval.-g).

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

Az ack jobb, mint a grep

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

Adjunk hozzá egy egyedi fájltípust —vue.

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

Mostantó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 -y

Telepítés

CentOS

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

Ubuntu

Mac OS

brew update && brew install ack

Telepítés a weboldalról

curl 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

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster