Ack grepdan yaxshiroqdir

Men sizga hayotni sezilarli darajada soddalashtiradigan bitta qidiruv yordam dasturi haqida gapirib bermoqchiman. Men serverga kirganimda va biror narsani izlashim kerak bo'lsa, men qiladigan birinchi narsa - ack o'rnatilganligini tekshirish. Ushbu yordamchi dastur grep, shuningdek find va wc ning ma'lum darajada o'rnini bosadi. Nega grep emas? Ack-da yaxshi sozlamalar, odamlar o'qishi mumkin bo'lgan ko'proq imkoniyatlar, perl regex va konfiguratsiya tizimi mavjud. Agar siz terminal orqali qidirishni yoqtirsangiz (kerak bo'lsa), uni albatta sinab ko'rishingiz kerak.

Asosiy xususiyatlar

Ack sukut bo'yicha rekursivdir va kamroq variantlarni yozish har doim yaxshi fikrdir.

Biz bayroqdan foydalanishimiz mumkin -wyordamchi dasturga so'z chegaralari (bo'sh bo'shliq, qiyshiq chiziq va boshqalar) bilan o'ralgan naqshimiz misolini izlashni aytish.

ack -w mysql

Ack grepdan yaxshiroqdir

Ack fayl turi bo'yicha qidirishni qo'llab-quvvatlaydi. Masalan, json fayllarida modul versiyasini topamiz.

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

Ack grepdan yaxshiroqdir

Qo'llab-quvvatlanadigan fayl turlarining to'liq ro'yxatini ko'rish mumkin:

ack --help-types

Ko'pincha skript qancha ma'lumotni qayta ishlaganini tushunish uchun, masalan, jurnal faylida ibora necha marta paydo bo'lishini hisoblashingiz kerak.

Ack grepdan yaxshiroqdir
Biz test.log faylida jarayon necha marta sodir bo'lishini hisoblaymiz (-i).

Biz hodisalarni faqat bitta faylda emas, balki guruhda sanashimiz mumkin. Keling, mysql so'zini oldingi qidiruvni yakunlaymiz: so'zlarning takrorlanish sonini hisoblang (- dan) *.js fayllarida(--js), hech narsa topilmagan fayllar bundan mustasno (-h) va natijani umumlashtirish.

# Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π½Π° экран всС вхоТдСния
ack --js -w mysql
# считаСм ΠΎΠ±Ρ‰ΡƒΡŽ сумму Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ
ack --js -wch mysql

Ack grepdan yaxshiroqdir

Bundan tashqari, biz har bir fayldagi hodisalar soni to'g'risida batafsil hisobotni olishimiz mumkin (-l)

ack --js -w -cl mysql

Ack grepdan yaxshiroqdir

Qidiruv uchun qo'shimcha kontekst kerak bo'lsa, ack so'rashingiz mumkin
gacha satrlarni ko'rsatish (-B) va keyin (-A) topilgan ifoda. Buning uchun variantdan keyin ko'rsatilishi kerak bo'lgan qatorlar sonini ko'rsatishingiz kerak.

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

Ack grepdan yaxshiroqdir

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

Ack grepdan yaxshiroqdir

Va agar sizga ikkalasi kerak bo'lsa, foydalaning (-C)

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

Variant ham bor(-v) qidiruvni invertatsiya qilish, ya'ni berilgan naqshni o'z ichiga olmagan qatorlarni ko'rsatish.

Muntazam ifoda

Ack, grepdan farqli o'laroq, Perl bilan mos iboralardan foydalanadi.
Men uchun bu katta plyus; oddiy iboralar uchun alohida sintaksisni eslab qolishim shart emas.

ack 'vars+adds+'

Ack grepdan yaxshiroqdir

Keyinchalik murakkab misol

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

Ack grepdan yaxshiroqdir

Ko'pincha siz natijalarda faqat shablonga mos keladigan narsani qoldirishni xohlaysiz. --output opsiyasi bu erda yordam beradi (-o)

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

Ack grepdan yaxshiroqdir

Bundan tashqari, qavslar yordamida topilgan qismni tanlab, unga $[guruh raqami] o'zgaruvchisi orqali chiqishda kirishimiz mumkin. Masalan,

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

Ack grepdan yaxshiroqdir

Ack foydali variantlarga ega --diapazon-start ΠΈ --diapazon-end. Qachon yordam berishadi
Ma'lumotlar bir qatorda emas, balki ko'p qatorli shaklda saqlanadi.

Masalan, sql kodli fayl mavjud

Ack grepdan yaxshiroqdir

Keling, ustun nomlarini chiqaramiz. Blokning boshi SELECT bilan boshlanadigan qator, oxiri esa FROM bilan boshlanadigan qator bo'ladi.

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

Ack grepdan yaxshiroqdir

Qidiruv ifodasi nuqta, qavs va boshqalar kabi maxsus belgilarni o'z ichiga olgan bo'lsa, ularni ishlatmaslik uchun opsiyadan foydalanishingiz mumkin. -Q.

# Поиск с экранированиСм 
ack --json 'mysql.'    
# Поиск Π±Π΅Π· экранирования
ack --json -Q mysql.

Ack grepdan yaxshiroqdir

Fayllar bilan ishlash

Muayyan kengaytmali fayllar ro'yxatini oling

ack -f --js

Ack grepdan yaxshiroqdir

Nomi P* bilan boshlangan barcha JS fayllarini toping ()-g).

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

Ack grepdan yaxshiroqdir

Konfiguratsiya

Yordamchi dastur o'z konfiguratsiya fayliga ega. Siz foydalanuvchi uchun global konfiguratsiyaga (~/.ackrc) va ma'lum bir jild uchun mahalliy konfiguratsiyaga ega bo'lishingiz mumkin (siz papkada .ackrc faylini yaratishingiz kerak).

Konfiguratsiyalarda yozilgan variantlarning aksariyati chaqirilganda qo'lda ko'rsatilishi mumkin. Keling, ulardan bir nechtasini ko'rib chiqaylik.

Qidirayotganda jildga e'tibor bermang

--ignore-dir=dist

Keling, maxsus fayl turini -vue qo'shamiz.

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

Endi siz fayllarni qidirish uchun --vue opsiyasidan foydalanishingiz mumkin .vue. Masalan: ack --vue ilovasi.
Ushbu parametr uchun kengaytmalar ro'yxatini belgilashingiz mumkin. Masalan, bu erda -vue dan foydalanganda quyidagilar qayta ishlanadi:
.js fayllari.

Fayllarga e'tibor bermang, masalan, kichiklashtirilgan *.min.js

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

sozlama

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

Saytdan o'rnatish

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

Tahrirlovchilar uchun plaginlar:

xulosa

Bu barcha imkoniyatlar emas. Funktsiyalarning to'liq ro'yxatini ishga tushirish orqali ko'rish mumkin:

ack –-help
# ΠΈΠ»ΠΈ
ack --man

Ack yordam dasturi terminalda qidiruvni yanada qulay va moslashuvchan qilish imkonini beradi. Va quvur liniyasidan foydalanish (ack -C 10 salom | dunyo) fayl tizimida va fayllarning o'zida ma'lumotlarni qidirish va filtrlash uchun kuchli kombinat yaratishingiz mumkin.

Manba: www.habr.com

a Izoh qo'shish