أريد أن أخبركم عن أداة بحث واحدة تعمل على تبسيط الحياة إلى حد كبير. عندما أصل إلى الخادم وأحتاج إلى البحث عن شيء ما، فإن أول شيء أفعله هو التحقق من تثبيت 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
إذا كنت بحاجة إلى سياق إضافي لبحثك، يمكنك أن تسأل ack
إظهار الأسطر حتى (-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
ابحث عن جميع ملفات js التي يبدأ اسمها بـ P* باستخدام الخيار (-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
أوبونتو
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