Ack нь grep-ээс дээр

Амьдралыг ихээхэн хөнгөвчлөх нэг хайлтын хэрэгслийн талаар би танд хэлэхийг хүсч байна. Би серверт очоод ямар нэг зүйл хайх шаардлагатай бол хамгийн түрүүнд хийх зүйл бол ack суулгасан эсэхийг шалгах явдал юм. Энэ хэрэгсэл нь grep, түүнчлэн find болон wc-г тодорхой хэмжээгээр орлуулах маш сайн хэрэгсэл юм. Яагаад grep болохгүй гэж? Ack нь илүү сайн тохиргоотой, хүн унших боломжтой сонголтууд, perl regex болон тохиргооны системтэй. Хэрэв та терминалаар хайх дуртай (шаардлагатай) бол үүнийг заавал туршиж үзэх хэрэгтэй.

Үндсэн шинж чанарууд

Ack нь анхдагчаар рекурсив бөгөөд цөөн сонголт бичих нь үргэлж сайн санаа юм.

Бид туг ашиглаж болно -wүгийн хилээр хүрээлэгдсэн бидний хэв маягийн жишээг хайхыг хэрэгсэлд хэлэх (хоосон зай, ташуу зураас гэх мэт).

ack -w mysql

Ack нь grep-ээс дээр

Ack нь файлын төрлөөр хайлт хийхийг дэмждэг. Жишээлбэл, json файлуудаас модулийн хувилбарыг олъё.

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

Ack нь grep-ээс дээр

Дэмжигдсэн файлын төрлүүдийн бүрэн жагсаалтыг дараах байдлаар харж болно.

ack --help-types

Скрипт хэр их мэдээлэл боловсруулсныг ойлгохын тулд жишээлбэл, лог файлд хэллэг хэдэн удаа гарч байгааг тоолох хэрэгтэй болдог.

Ack нь grep-ээс дээр
Бид test.log файлд үйл явц хэдэн удаа тохиолдож байгааг тоолж, тохиолдлыг харгалзахгүй (-i).

Бид зөвхөн нэг тодорхой файлд биш, харин бүлэгт тохиолдсон тохиолдлуудыг тоолж чадна. mysql гэсэн үгийн өмнөх хайлтыг дуусгая: үгсийн тохиолдлын тоог тоол (-ээс) *.js файлд(--js), юу ч олдоогүй файлуудыг эс тооцвол (-h) болон үр дүнг нэгтгэн дүгнэх.

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

Ack нь grep-ээс дээр

Нэмж дурдахад, бид файл тус бүрт тохиолдсон тохиолдлын тоог (-г ашиглан дэлгэрэнгүй тайланг авч болно.-l)

ack --js -w -cl mysql

Ack нь grep-ээс дээр

Хэрэв танд хайлтанд нэмэлт контекст хэрэгтэй бол акк асууж болно
хүртэлх мөрүүдийг харуулах (-B) ба дараа (-A) олсон илэрхийлэл. Үүнийг хийхийн тулд та сонголтын дараа харуулах шаардлагатай мөрүүдийн тоог зааж өгөх хэрэгтэй.

# 2 строки до 
ack --js --column -B 2 "query.once('" ./lib/

Ack нь grep-ээс дээр

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

Ack нь grep-ээс дээр

Хэрэв танд хоёулаа хэрэгтэй бол (-FROM)

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

Бас сонголт бий(-v) хайлтыг эргүүлэх, өөрөөр хэлбэл өгөгдсөн загвар агуулаагүй мөрүүдийг харуулах.

Тогтмол илэрхийлэл

Ack нь grep-ээс ялгаатай нь Perl-тэй нийцтэй илэрхийлэлүүдийг ашигладаг.
Миний хувьд энэ бол том давуу тал; Би ердийн хэллэгийн хувьд тусдаа синтакс санах шаардлагагүй.

ack 'vars+adds+'

Ack нь grep-ээс дээр

Илүү төвөгтэй жишээ

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

Ack нь grep-ээс дээр

Үр дүнд нь зөвхөн загварт тохирсон зүйлийг л үлдээхийг хүсдэг. --output сонголт энд туслах болно (-o)

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

Ack нь grep-ээс дээр

Нэмж хэлэхэд, бид хаалт ашиглан олдсон хэсгийг сонгоод $[бүлгийн дугаар] хувьсагчаар дамжуулан гаралтад хандах боломжтой. Жишээлбэл,

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

Ack нь grep-ээс дээр

Ack-д ашигтай сонголтууд бий --хүрээ-эхлэх и --хүрээний төгсгөл. Тэд хэзээ тусалдаг
Өгөгдөл нь нэг мөрөнд биш, харин олон мөрт хэлбэрээр хадгалагддаг.

Жишээ нь sql кодтой файл байна

Ack нь grep-ээс дээр

Баганын нэрийг задлаад үзье. Блокийн эхлэл нь SELECT-ээр эхэлсэн мөр байх ба төгсгөл нь FROM-оор эхэлсэн мөр байх болно.

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

Ack нь grep-ээс дээр

Хайлтын илэрхийлэл нь цэг, хаалт болон бусад тэмдэгтүүдийг агуулж байгаа бол тэдгээрийг ашиглахаас зайлсхийхийн тулд та сонголтыг ашиглаж болно. -Q.

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

Ack нь grep-ээс дээр

Файлтай ажиллах

Тодорхой өргөтгөлтэй файлуудын жагсаалтыг аваарай

ack -f --js

Ack нь grep-ээс дээр

( гэсэн сонголтыг ашиглан нэр нь P*-ээр эхэлсэн бүх js файлыг олоорой.-g).

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

Ack нь grep-ээс дээр

Тохиргоо

Энэ хэрэгсэл нь өөрийн тохиргооны файлтай. Та хэрэглэгчийн хувьд глобал тохиргоо (~/.ackrc) болон тодорхой фолдерт локал тохиргоотой байж болно (та хавтсанд .ackrc файл үүсгэх хэрэгтэй).

Тохиргоонд бичигдсэн ихэнх сонголтуудыг дуудах үед гараар зааж өгч болно. Тэдгээрийн заримыг нь харцгаая.

Хайлт хийхдээ фолдерыг үл тоомсорло

--ignore-dir=dist

Захиалгат файлын төрлийг -vue нэмье.

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

Одоо та файл хайхдаа --vue сонголтыг ашиглаж болно .vue. Жишээлбэл: ack --vue програм.
Та энэ сонголтын өргөтгөлүүдийн жагсаалтыг зааж өгч болно. Жишээлбэл, энд -vue ашиглах үед дараахь зүйлийг боловсруулна.
.js файлууд.

Файлуудыг үл тоомсорлох, жишээ нь жижигрүүлсэн *.min.js

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

тохиргоо

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

Сайтаас суурилуулалт

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

Редакторуудад зориулсан залгаасууд:

дүгнэлт

Эдгээр нь бүх боломж биш юм. Функцуудын бүрэн жагсаалтыг дараахыг ажиллуулснаар харж болно.

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

Ack хэрэгсэл нь терминал дахь хайлтыг илүү хялбар, уян хатан болгох боломжийг олгодог. Мөн дамжуулах хоолойг ашиглах (ack -C 10 сайн уу | ертөнц) та файлын систем болон файл дотроос өгөгдлийг хайх, шүүх хүчирхэг хослол үүсгэж болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх