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-тен жақсы

Егер сізге екеуі де керек болса, онда ()

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

пікір қалдыру