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

إذا كنت بحاجة إلى سياق إضافي لبحثك، يمكنك أن تسأل ack
إظهار الأسطر حتى (-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

بالإضافة إلى ذلك، باستخدام الأقواس يمكننا تحديد الجزء الذي تم العثور عليه والوصول إليه في الإخراج من خلال المتغير $[group number] . على سبيل المثال،

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

ابحث عن جميع ملفات js التي يبدأ اسمها بـ P* باستخدام الخيار (-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

أوبونتو

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

إضافة تعليق