Мен сізге өмірді айтарлықтай жеңілдететін бір іздеу утилитасы туралы айтқым келеді. Серверге жеткенде және бірдеңе іздеу керек болғанда, мен біріншіден ack орнатылғанын тексеремін. Бұл утилита белгілі бір дәрежеде grep, сондай-ақ find және wc үшін тамаша алмастырғыш болып табылады. Неге grep емес? Ack-те жақсырақ параметрлер, адам оқи алатын опциялар, perl regex және конфигурация жүйесі бар. Егер сізге терминал арқылы іздеу ұнаса (керек болса), онда сіз оны міндетті түрде қолданып көруіңіз керек.
Негізгі мүмкіндіктер
Ack әдепкі бойынша рекурсивті болып табылады және аз опцияларды жазу әрқашан жақсы идея.
Біз жалаушаны пайдалана аламыз -wутилитаға сөз шекараларымен қоршалған үлгінің данасын іздеуді айту (бос орын, қиғаш сызықтар және т.б.).
ack -w mysql
Ack файл түрі бойынша іздеуді қолдайды. Мысалы, json файлдарынан модуль нұсқасын табайық.
ack --json '"version":s+"d+.d+.d+"'
Қолдау көрсетілетін файл түрлерінің толық тізімін мыналарды пайдаланып көруге болады:
ack --help-types
Көбінесе сценарийдің қанша деректерді өңдегенін түсіну үшін, мысалы, журнал файлында сөз тіркесінің қанша рет пайда болатынын санау қажет.
Біз жағдайды есепке алмай, test.log файлында процестің қанша рет болатынын есептейміз (-i).
Біз оқиғаларды бір нақты файлда ғана емес, топта да санай аламыз. Mysql сөзі бойынша алдыңғы іздеуді аяқтаймыз: сөздердің кездесу санын санау (-мен) *.js файлдарында(--js), ештеңе табылмаған файлдарды қоспағанда (-h) және нәтижені қорытындылау.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Сонымен қатар, біз әрбір файлдағы оқиғалардың саны туралы егжей-тегжейлі есеп ала аламыз (-l)
ack --js -w -cl mysql
Іздеу үшін қосымша мәтінмән қажет болса, акк сұрай аласыз
дейінгі жолдарды көрсету (-B) және кейін (-A) табылған өрнектің. Ол үшін опциядан кейін көрсетілуі қажет жолдардың санын көрсету керек.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
Егер сізге екеуі де керек болса, онда (-С)
ack --js --column -C 2 "query.once('" ./lib/
Опция да бар(-v) іздеуді инверсиялау үшін, яғни берілген үлгіні қамтымайтын жолдарды көрсету.
Тұрақты өрнек
Ack, grep-тен айырмашылығы, Perl-мен үйлесімді өрнектерді пайдаланады.
Мен үшін бұл үлкен плюс; тұрақты өрнектер үшін бөлек синтаксисті есте сақтаудың қажеті жоқ.
ack 'vars+adds+'
Неғұрлым күрделі мысал
ack '*s+[vd+.d+.d+]'
Көбінесе сіз үлгіге сәйкес келетін нәтижелерді ғана қалдырғыңыз келеді. Мұнда --output опциясы көмектеседі (-o)
ack -o '*s+[vd+.d+.d+]'
Сонымен қатар, жақшаларды пайдаланып, табылған бөлікті таңдап, оған $[топ нөмірі] айнымалысы арқылы шығуға қол жеткізе аламыз. Мысалы,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Ack қолданбасында пайдалы опциялар бар --диапазон-бастау и --диапазон-соңы. Олар қашан көмектеседі
Деректер бір жолда емес, көп жолды түрде сақталады.
Мысалы, sql коды бар файл бар
Баған атауларын шығарып алайық. Блоктың басы SELECT-тен басталатын жол, ал соңы FROM-дан басталатын жол болады.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Егер іздеу өрнегі нүкте, жақша және басқалар сияқты арнайы таңбаларды қамтыса, оларды пайдаланып қашып кетпеу үшін опцияны пайдалануға болады. -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Файлдармен жұмыс істеу
Белгілі бір кеңейтімі бар файлдар тізімін алыңыз
ack -f --js
( опциясын пайдаланып аты P* әрпінен басталатын барлық JS файлдарын табыңыз.-g).
ack -g --js '/Pa.+.js$'
Конфигурация
Утилитаның өзінің конфигурация файлы бар. Сізде пайдаланушы үшін жаһандық конфигурация (~/.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