من می خواهم در مورد یک ابزار جستجو به شما بگویم که زندگی را بسیار ساده می کند. وقتی به سرور میرسم و باید دنبال چیزی بگردم، اولین کاری که میکنم این است که بررسی کنم آیا ack نصب شده است یا خیر. این ابزار یک جایگزین عالی برای grep و همچنین find و wc تا حدودی است. چرا grep نه؟ Ack تنظیمات بهتری دارد، گزینههای قابل خواندن برای انسان بیشتر، پرل 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+]'
علاوه بر این، با استفاده از پرانتز میتوانیم قسمت پیدا شده را انتخاب کرده و از طریق متغیر $[group number] به آن در خروجی دسترسی پیدا کنیم. مثلا،
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
با استفاده از گزینه ((-g).
ack -g --js '/Pa.+.js$'
پیکربندی
این ابزار دارای فایل پیکربندی خاص خود است. شما می توانید هم یک پیکربندی جهانی برای کاربر (~/.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