
غلاف حول grep، لمساعدتك في البحث عن الأشياء
أداة غلاف حول grep لتجنب كتابة الأنماط الشائعة.
أستخدم grep كثيرًا. عند تدقيق قواعد الأكواد، أو النظر إلى مخرجات meg، أو بشكل عام التعامل مع كميات كبيرة من البيانات. غالبًا ما أنتهي باستخدام أنماط معقدة إلى حد ما مثل هذا:
▶ grep -HnrE '(\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))' *
من السهل جدًا ارتكاب الأخطاء عند كتابة كل ذلك، وقد يكون من الصعب معرفة ما إذا لم تحصل على أي نتائج لأنه لا يوجد شيء لتجده، أو لأنك أخطأت في كتابة النمط أو اخترت الأعلام (flags) الخاطئة.
لقد كتبت gf لإعطاء أسماء لمجموعات الأنماط والأعلام التي أستخدمها طوال الوقت. لذا فإن الأمر أعلاه يصبح ببساطة:
▶ gf php-sources
يتم تخزين تعريفات الأنماط في ~/.gf كملفات JSON صغيرة يمكن الاحتفاظ بها تحت نظام التحكم في الإصدارات:
▶ cat ~/.gf/php-sources.json
{
"flags": "-HnrE",
"pattern": "(\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))"
}
للمساعدة في تقليل طول النمط وتعقيده قليلاً، يمكنك أيضًا تحديد قائمة بأنماط متعددة:
▶ cat ~/.gf/php-sources-multiple.json
{
"flags": "-HnrE",
"patterns": [
"\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)",
"php://(input|stdin)"
]
}
هناك المزيد من ملفات الأنماط المثال في دليل examples.
يمكنك استخدام علم -save لإنشاء ملفات أنماط من سطر الأوامر:
▶ gf -save php-serialized -HnrE '(a:[0-9]+:{|O:[0-9]+:"|s:[0-9]+:")'
يوجد نص برمجي للإكمال التلقائي مرفق، بحيث يمكنك الضغط على 'tab' لعرض الخيارات المتاحة لديك:
▶ gf <tab>
base64 debug-pages fw php-curl php-errors php-sinks php-sources sec takeovers urls
لتشغيل الإكمال التلقائي، تحتاج إلى source لملف gf-completion.bash في ملف .bashrc أو ما شابه ذلك:
source ~/path/to/gf-completion.bash
لتشغيل الإكمال التلقائي، تحتاج إلى تفعيل الإكمال التلقائي (ليس ضروريًا إذا كان لديك oh-my-zsh) باستخدام autoload -U compaudit && compinit أو بوضعه في .zshrc
ثم source لملف gf-completion.zsh في ملف .zshrc أو ما شابه ذلك:
source ~/path/to/gf-completion.zsh
ملاحظة: إذا كنت تستخدم oh-my-zsh أو ما شابه ذلك، فقد تجد أن gf هو اسم مستعار لـ git fetch. يمكنك إما إعادة تسمية ملف gf الثنائي إلى اسم آخر، أو استخدام unalias gf لإزالة الاسم المستعار git fetch.
هناك بعض محركات البحث عن الأكواد المذهلة التي يمكن أن تكون بديلاً أفضل لـ grep.
مثال جيد هو the silver searcher.
إنه أسرع (مثل أسرع بكثير) ويعرض النتائج بطريقة أسهل بصريًا في الاستيعاب.
من أجل استخدام محرك مختلف، أضف engine: <other tool> إلى ملف النمط المعني:
# استخدام the silver searcher بدلاً من grep لنمط aws-keys:
# 1. إضافة محرك "ag"
# 2. إزالة علم E غير الضروري بالنسبة لـ ag
{
"engine": "ag",
"flags": "-Hanr",
"pattern": "([^A-Z0-9]|^)(AKIA|A3T|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{12,}"
}
E من ملف aws-keys.json حتى يعمل ag بنجاح.إذا كان لديك Go مثبتًا ومهيأً، يمكنك تثبيت gf باستخدام:
▶ go get -u github.com/tomnomnom/gf
إذا قمت بالتثبيت باستخدام go get، يمكنك تفعيل الإكمال التلقائي في ملف .bashrc بهذه الطريقة:
▶ echo 'source $GOPATH/src/github.com/tomnomnom/gf/gf-completion.bash' >> ~/.bashrc
لاحظ أنه سيتعين عليك إعادة تشغيل الطرفية، أو تشغيل source ~/.bashrc لكي تصبح التغييرات سارية المفعول.
لتبدأ بسرعة، يمكنك نسخ ملفات الأنماط المثال إلى ~/.gf بهذه الطريقة:
▶ cp -r $GOPATH/src/github.com/tomnomnom/gf/examples ~/.gf
أنماطي الشخصية التي أدرجتها كأمثلة قد لا تكون مفيدة جدًا لك، لكن آمل أن تكون نقطة مرجعية معقولة.
في الحقيقة سأكون مهتمًا أكثر بملفات الأنماط الجديدة! إذا كان لديك شيء تبحث عنه بانتظام باستخدام grep، فلا تتردد في إرسال PR لإضافة ملفات أنماط جديدة إلى دليل الأمثلة.
إصلاحات الأخطاء مرحب بها أيضًا كما هو الحال دائمًا :)