هل واجهت يومًا ما مهمة البحث عن سلسلة أو نمط معين في ملف، ولكن لم تكن تعرف من أين تبدأ البحث؟ إذاً، ها هي أمر أمر grep يأتي للإنقاذ!
grep هو أداة قوية للبحث عن أنماط في الملفات متوفرة في كل توزيعة من توزيعات Linux. إذا لم يكن مثبتًا على نظامك لأي سبب، يمكنك تثبيته بسهولة عبر مدير الحزم كما هو موضح.
$ sudo apt install grep [On Debian, Ubuntu and Mint] $ sudo yum install grep [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux] $ sudo emerge -a sys-apps/grep [On Gentoo Linux] $ sudo apk add grep [On Alpine Linux] $ sudo pacman -S grep [On Arch Linux] $ sudo zypper install grep [On OpenSUSE]
I have found that the easiest way to get your feet wet with the grep command is to just dive right in and use some real-world examples.
1. البحث والعثور على الملفات في نظام Linux
لنفترض أنك قمت للتو بتثبيت نسخة جديدة من أوبونتو على جهازك وأنك تنوي تجربة كتابة البرامج بلغة Python.
لقد كنت تبحث على الويب عن دروس، لكنك ترى أن هناك نسختين مختلفتين من Python قيد الاستخدام، ولا تعرف أي نسخة من Python مثبتة على أوبونتو بواسطة المثبت، أو ما إذا كان قد قام بتثبيت أي وحدات.
قم بتشغيل الأمر التالي أمر dpkg مع grep كما هو موضح:
dpkg -l | grep -i python

أولاً، قمنا بتشغيل dpkg –l
، الذي يقوم بإدراج الحزم *.deb
المثبتة على النظام الخاص بك. ثانياً، قمنا بتوجيه هذا الإخراج إلى grep -i python
، الذي يقول ببساطة “انتقل إلى البحث وقم بتصفية وإرجاع كل ما يحتوي على ‘python'”.
الخيار -i
موجود لتجاهل الحالة، حيث أن grep حساس للحالة. استخدام الخيار -i
عادة جيدة إلا إذا كنت تحاول تحديد بحث أكثر تحديدا.
2. البحث وتصفية الملفات في نظام Linux
يمكن استخدام grep أيضًا للبحث والتصفية داخل ملفات فردية أو متعددة. دعونا نأخذ هذا السيناريو:
لديك بعض المشاكل مع خادم الويب Apache الخاص بك، ولقد تواصلت مع أحد المنتديات الرائعة على الإنترنت لطلب المساعدة.
الشخص الطيب الذي يرد عليك طلب منك نشر محتويات ملف /etc/apache2/apache2.conf الخاص بك. أليس من الأسهل بالنسبة لك والشخص الذي يساعدك وللجميع الذين يقرؤونه إذا كنت تستطيع إزالة جميع الأسطر المعلقة؟ بالطبع، يمكنك! ما عليك سوى تشغيل هذا:
grep -v ^\# /etc/apache2/apache2.conf | grep .
يخبر الخيار -v
grep بعكس إخراجه، مما يعني بدلاً من طباعة الأسطر المطابقة، قم بالعكس واطبع جميع الأسطر التي لا تتطابق مع التعبير، في هذه الحالة، الأسطر المعلقة #
.
لاحظ أننا استخدمنا أيضاً grep .
في النهاية من أجل إخفاء إخراج جميع الأسطر الفارغة. بهذه الطريقة فقط نرى إعدادات التكوين في نافذة الطرفية الخاصة بنا.

3. العثور على جميع ملفات .mp3 في نظام Linux
يمكن أن يكون grep مفيدًا للغاية في تصفية المخرجات من stdout. على سبيل المثال، دعنا نقول أن لديك مجلدًا كاملاً مليء بملفات الموسيقى بتنسيقات مختلفة
تريد العثور على جميع ملفات *.mp3
للفنان JayZ، ولكنك لا تريد أي من المقطوعات المعاد تحريفها. باستخدام أمر find مع بعض أنابيب grep سيقوم بالمهمة:
# find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”
في هذا المثال، نستخدم find لطباعة جميع الملفات ذات امتداد *.mp3
، ثم ننقلها إلى grep –i
لتصفية وطباعة جميع الملفات بالاسم “JayZ“، ثم أنبوب آخر إلى grep –vi
الذي يقوم بتصفية وعدم طباعة جميع أسماء الملفات التي تحتوي على السلسلة (بأي حال من الأحوال) “remix“.
[ قد تحتاج أيضًا: 35 أمثلة عملية لأمر البحث في لينكس ]
4. عرض عدد الأسطر قبل أو بعد سلسلة البحث
خيارات أخرى هي مفتاح -A
و -B
، التي تعرض السطر المطابق وعددًا من الأسطر إما التي تأتي قبل أو بعد سلسلة البحث.
بينما الصفحة الرجل تعطي شرحًا أكثر تفصيلًا، أجد أنه من الأسهل تذكر الخيارات كـ -A
= بعد، و -B
= قبل:
ifconfig | grep -A 4 inet ifconfig | grep -B 2 UP

5. يطبع عدد الأسطر حول التطابق
خيار -C
في الأمر grep مماثل، ولكن بدلاً من طباعة الأسطر التي تأتي قبل أو بعد السلسلة، يقوم بطباعة الأسطر في أي اتجاه:
# ifconfig | grep -C 2 lo TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 15314 bytes 1593769 (1.5 MB) RX errors 0 dropped 0 overruns 0 frame 0
6. عد عدد التطابقات
مماثل لتوجيه سلسلة grep إلى عدد الكلمات (أمر wc)، يمكن لخيار مدمج في grep أن يقوم بنفس العمل لك:
# ifconfig | grep -c inet6
7. البحث في الملفات باستخدام سلسلة معينة في لينكس
الخيار –n
لـ grep مفيد جدًا عند تصحيح الملفات أثناء حدوث أخطاء الترجمة. يعرض رقم السطر في الملف للسلسلة البحث المعطاة:
# grep -n "main" setup.py
8. البحث عن سلسلة بشكل متكرر في جميع الدلائل
إذا كنت ترغب في البحث عن سلسلة في الدليل الحالي مع جميع الدلائل الفرعية، يمكنك تحديد الخيار –r
للبحث بشكل متكرر:
# grep -r “function” *
9. البحث عن النمط بالكامل
تمرير الخيار -w
إلى grep يبحث عن النمط بأكمله الموجود في السلسلة. على سبيل المثال، باستخدام:
# ifconfig | grep -w "RUNNING"
سيتم طباعة السطر الذي يحتوي على النمط بين علامات التنصيص. من ناحية أخرى، إذا حاولت:
# ifconfig | grep -w "RUN"

لن يتم إرجاع أي شيء لأننا لا نبحث عن نمط، بل عن كلمة كاملة.
10. البحث عن سلسلة في ملفات Gzipped
يستحق بعض الإشارة مشتقات grep. الأول هو zgrep، الذي، على غرار zcat، يستخدم على ملفات مضغوطة بتنسيق gzip. يأخذ نفس الخيارات كـ grep ويستخدم بنفس الطريقة:
# zgrep -i error /var/log/syslog.2.gz

11. تطابق التعبيرات العادية في الملفات
أمر egrep هو مشتق آخر يعني “تعبير عادي عالمي موسع”. يتعرف على رموز تعبير إضافية مثل at + ? |
و ()
.
أمر egrep مفيد جدًا للبحث في ملفات المصدر وقطع الشفرة الأخرى، عند الحاجة. يمكن استدعاؤه من grep العادي عن طريق تحديد الخيار -E
.
grep -E
12. البحث عن سلسلة نمطية ثابتة
أمر fgrep يبحث في ملف أو قائمة من الملفات عن سلسلة نمطية ثابتة. إنه نفسه كـ grep -F
. طريقة شائعة لاستخدام fgrep هي تمرير ملف بنماط إليه:
fgrep –f file_full_of_patterns.txt file_to_search.txt
هذا هو نقطة انطلاق فقط مع grep ، ولكن كما ربما تكون قادرًا على رؤية ذلك، فإنه لا يقدر بثمن لمجموعة متنوعة من الأغراض. بغض النظر عن الأوامر البسيطة المكونة من سطر واحد التي قمنا بتنفيذها، يمكن استخدام grep لكتابة أوامر cron قوية، ونصوص shell قوية، للبدء.
كن مبدعًا، قم بتجربة الخيارات على صفحة الرجل ، وابتكر تعبيرات grep تخدم أغراضك الخاصة!
Source:
https://www.tecmint.com/12-practical-examples-of-linux-grep-command/