Az Ack jobb, mint a grep

Egy kereső segédprogramról szeretnék mesélni, amely nagyban leegyszerűsíti az életet. Amikor a kiszolgálóhoz érek, és keresnem kell valamit, először ellenőrizni kell, hogy az ack telepítve van-e. Ez a segédprogram kiválóan helyettesíti a grep-et, valamint bizonyos mértékig a find-ot és a wc-t is. Miért nem grep? Az Ack-nek szebb beállításai vannak, több ember által olvasható opciók, perl regex és konfigurációs rendszer. Ha szeret (kell) keresgélni a terminálon, akkor mindenképpen próbálja ki.

Alapvető funkciók

Az Ack alapértelmezés szerint rekurzív, és mindig jó ötlet kevesebb opciót írni.

Használhatunk zászlót -wmegmondani a segédprogramnak, hogy keressen szóhatárokkal (szóközökkel, perjelekkel stb.) körülvett mintánkat.

ack -w mysql

Az Ack jobb, mint a grep

Az Ack támogatja a fájltípus szerinti keresést. Például keressük meg a modul verzióját a json-fájlokban.

ack --json '"version":s+"d+.d+.d+"'

Az Ack jobb, mint a grep

A támogatott fájltípusok teljes listája megtekinthető a következő használatával:

ack --help-types

Gyakran meg kell számolni, hogy egy kifejezés hányszor jelenik meg egy naplófájlban, például annak megértéséhez, hogy a szkript mennyi adatot dolgozott fel.

Az Ack jobb, mint a grep
Megszámoljuk, hogy a folyamat hányszor fordul elő a test.log fájlban, figyelmen kívül hagyva az esetet (-i).

Nem csak egy adott fájlban, hanem egy csoportban is megszámolhatjuk az előfordulásokat. Végezzük el a mysql szó előző keresését: számoljuk meg a szavak előfordulásának számát (-Val vel) a *.js fájlokban(--js), kivéve azokat a fájlokat, amelyekben nem található semmi (-h) és az eredmény összegzése.

# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql

Az Ack jobb, mint a grep

Ezen kívül részletes jelentést kaphatunk az egyes fájlokban előforduló előfordulások számáról a (-l)

ack --js -w -cl mysql

Az Ack jobb, mint a grep

Ha további kontextusra van szüksége a kereséshez, kérdezze meg az ack-t
sorokat mutat (-B) és utána (-A) a talált kifejezésből. Ehhez az opció után meg kell adni a megjelenítendő sorok számát.

# 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

És ha mindkettőre szüksége van, akkor használja (-VAL VEL)

ack --js --column -C 2 "query.once('" ./lib/

Van még egy lehetőség (-v) a keresés megfordításához, azaz olyan vonalak megjelenítéséhez, amelyek nem tartalmaznak adott mintát.

Reguláris kifejezés

Az Ack a grep-től eltérően Perl-kompatibilis kifejezéseket használ.
Számomra ez egy nagy előny; nem kell külön szintaxist emlékeznem 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 csak azt akarja meghagyni az eredmények között, ami megfelel a sablonnak. A --output opció segít itt (-o)

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

Az Ack jobb, mint a grep

Ezenkívül a zárójelek segítségével kiválaszthatjuk a talált részt, és elérhetjük a kimenetben a $[csoportszám] változón keresztül. Például,

ack --output='version is $1' '*s+[v(d+.d+.d+)]'

Az Ack jobb, mint a grep

Ack hasznos lehetőségeket kínál --tartomány-start и --tartomány vége. Amikor segítenek
Az adatok nem egy sorban, hanem többsoros formában tárolódnak.

Például van egy fájl sql kóddal

Az Ack jobb, mint a grep

Vegyük ki az oszlopneveket. A blokk eleje egy SELECT karakterrel kezdődő sor, a vége pedig egy FROM karakterrel kezdődő sor lesz.

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql

Az Ack jobb, mint a grep

Ha a keresési kifejezés speciális karaktereket tartalmaz, például pontot, zárójelet és másokat, akkor annak érdekében, hogy ne kerülje el őket a használatával, használhatja a lehetőséget -Q.

# Поиск с экранированием 
ack --json 'mysql.'    
# Поиск без экранирования
ack --json -Q mysql.

Az Ack jobb, mint a grep

Fájlokkal való munka

Szerezze meg a fájlok listáját egy adott kiterjesztéssel

ack -f --js

Az Ack jobb, mint a grep

Keresse meg az összes P*-val kezdődő js-fájlt a (-g).

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

Az Ack jobb, mint a grep

Configuration

A segédprogramnak saját konfigurációs fájlja van. A felhasználó globális konfigurációja (~/.ackrc) és helyi konfigurációja is lehet egy adott mappához (a mappában létre kell hoznia egy .ackrc fájlt).

A konfigurációkba írt opciók többsége manuálisan megadható híváskor. Nézzünk meg ezek közül néhányat.

A mappa figyelmen kívül hagyása kereséskor

--ignore-dir=dist

Adjunk hozzá egy egyéni fájltípust -vue.

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

Most már használhatja a --vue opciót a fájlok kereséséhez .vue. Például: ack --vue App.
Ehhez a beállításhoz megadhatja a bővítmények listáját. Például itt a -vue használatakor a következők kerülnek feldolgozásra:
.js fájlokat.

Figyelmen kívül hagyja a fájlokat, például a kicsinyített *.min.js fájlokat

--ignore-file=match:/.min.js$/

Telepítés

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

Telepítés a helyszínről

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

Beépülő modulok szerkesztőknek:

Következtetés

Ez nem minden lehetőség. A funkciók teljes listája a következő futtatással tekinthető meg:

ack –-help
# или
ack --man

Az ack segédprogram lehetővé teszi, hogy kényelmesebbé és rugalmasabbá tegye a terminálban történő keresést. És csővezeték használatával (ack -C 10 hello | ak világ) hatékony kombinációt hozhat létre az adatok kereséséhez és szűréséhez a fájlrendszerben és magukban a fájlokban.

Forrás: will.com

Hozzászólás