اک بهتر از grep است

من می خواهم در مورد یک ابزار جستجو به شما بگویم که زندگی را بسیار ساده می کند. وقتی به سرور می‌رسم و باید دنبال چیزی بگردم، اولین کاری که می‌کنم این است که بررسی کنم آیا ack نصب شده است یا خیر. این ابزار یک جایگزین عالی برای grep و همچنین find و wc تا حدودی است. چرا grep نه؟ Ack تنظیمات بهتری دارد، گزینه‌های قابل خواندن برای انسان بیشتر، پرل regex و یک سیستم پیکربندی. اگر دوست دارید (باید) از طریق ترمینال جستجو کنید، قطعاً باید آن را امتحان کنید.

ویژگی های اساسی

Ack به طور پیش فرض بازگشتی است و نوشتن گزینه های کمتر همیشه ایده خوبی است.

می توانیم از پرچم استفاده کنیم -wبه برنامه بگوییم که به دنبال نمونه ای از الگوی ما بگردد که با مرزهای کلمه احاطه شده است (فاصله سفید، اسلش، و غیره).

ack -w mysql

اک بهتر از grep است

Ack از جستجو بر اساس نوع فایل پشتیبانی می کند. به عنوان مثال، اجازه دهید نسخه ماژول را در فایل های json پیدا کنیم.

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

اک بهتر از grep است

لیست کاملی از انواع فایل های پشتیبانی شده را می توان با استفاده از:

ack --help-types

برای مثال، برای درک اینکه اسکریپت چه مقدار داده را پردازش کرده است، اغلب باید شمارش کنید که یک عبارت در یک فایل گزارش چند بار ظاهر می شود.

اک بهتر از grep است
ما شمارش می کنیم که چند بار فرآیند در فایل test.log رخ می دهد، بدون در نظر گرفتن حروف بزرگ (-i).

ما می توانیم اتفاقات را نه فقط در یک فایل خاص، بلکه در یک گروه بشماریم. بیایید جستجوی قبلی برای کلمه mysql را نهایی کنیم: تعداد دفعات کلمات را بشمار (-از جانب) در فایل های *.js(--js، به استثنای فایل هایی که در آنها چیزی یافت نشد (-h) و نتیجه را جمع بندی کنید.

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

اک بهتر از grep است

علاوه بر این، می‌توانیم با استفاده از ((-l)

ack --js -w -cl mysql

اک بهتر از grep است

اگر به زمینه اضافی برای جستجوی خود نیاز دارید، می‌توانید درخواست کنید
نمایش خطوط تا (-B) و بعد از (-A) از عبارت یافت شده. برای این کار باید بعد از گزینه تعداد خطوطی که باید نشان داده شوند را مشخص کنید.

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

اک بهتر از grep است

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

اک بهتر از grep است

و اگر به هر دو نیاز دارید، از (-از جانب)

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

یک گزینه نیز وجود دارد (-v) برای معکوس کردن جستجو، به عنوان مثال خطوطی را نشان دهید که حاوی الگوی مشخصی نیستند.

عبارت منظم

Ack بر خلاف grep از عبارات سازگار Perl استفاده می کند.
برای من این یک مزیت بزرگ است؛ من مجبور نیستم یک نحو جداگانه برای عبارات منظم به خاطر بسپارم.

ack 'vars+adds+'

اک بهتر از grep است

مثال پیچیده تر

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

اک بهتر از grep است

اغلب شما می خواهید در نتایج فقط آنچه را که با الگو مطابقت دارد باقی بگذارید. گزینه --output در اینجا کمک خواهد کرد (-o)

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

اک بهتر از grep است

علاوه بر این، با استفاده از پرانتز می‌توانیم قسمت پیدا شده را انتخاب کرده و از طریق متغیر $[group number] به آن در خروجی دسترسی پیدا کنیم. مثلا،

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

اک بهتر از grep است

Ack گزینه های مفیدی دارد -- محدوده-شروع и -- دامنه-پایان. وقتی کمک می کنند
داده ها نه در یک خط، بلکه به صورت چند خطی ذخیره می شوند.

به عنوان مثال، یک فایل با کد sql وجود دارد

اک بهتر از grep است

بیایید نام ستون ها را استخراج کنیم. ابتدای بلوک خطی خواهد بود که با SELECT شروع می شود و انتهای آن خطی است که با FROM شروع می شود.

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

اک بهتر از grep است

اگر عبارت جستجو حاوی کاراکترهای خاصی مانند نقطه، پرانتز و موارد دیگر باشد، برای اینکه از آنها فرار نکنید، می توانید از گزینه استفاده کنید. -Q.

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

اک بهتر از grep است

کار با فایل ها

لیستی از فایل های با پسوند خاص را دریافت کنید

ack -f --js

اک بهتر از grep است

با استفاده از گزینه ((-g).

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

اک بهتر از grep است

پیکربندی

این ابزار دارای فایل پیکربندی خاص خود است. شما می توانید هم یک پیکربندی جهانی برای کاربر (~/.ackrc) و هم یک پیکربندی محلی برای یک پوشه خاص داشته باشید (شما باید یک فایل ackrc. را در پوشه ایجاد کنید).

اکثر گزینه هایی که در تنظیمات نوشته شده اند را می توان به صورت دستی در هنگام فراخوانی مشخص کرد. بیایید به چند مورد از آنها نگاه کنیم.

هنگام جستجو، پوشه را نادیده بگیرید

--ignore-dir=dist

بیایید یک نوع فایل سفارشی -vue اضافه کنیم.

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

اکنون می توانید از گزینه --vue برای جستجوی فایل ها استفاده کنید vue. مثلا: برنامه ack --vue.
می توانید لیستی از افزونه ها را برای این گزینه مشخص کنید. به عنوان مثال، در اینجا، هنگام استفاده از -vue، موارد زیر پردازش می شوند:
فایل های js.

فایل‌ها را نادیده بگیرید، برای مثال minified *.min.js

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

نصب

لینوکس

yum update -y && yum install ack -y

اوبونتو

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

اضافه کردن نظر