أمر Grep في Linux/UNIX

ما هو Grep

Grep، وهو اختصار لـ “البحث العالمي في التعبيرات العادية والطباعة”، هو أمر يُستخدم للبحث والتطابق مع أنماط النصوص في الملفات التي تحتوي على تعابير عادية. علاوة على ذلك، يأتي الأمر مثبتًا مسبقًا في كل توزيعة Linux. في هذا الدليل، سنلقي نظرة على أكثر استخدامات أمر grep شيوعًا، جنبًا إلى جنب مع الحالات الاستخدام الشائعة.

أمر Grep في Linux

يمكن استخدام أمر Grep للبحث عن التعبير العادي أو السلسلة في ملف نصي. لتوضيح ذلك، دعونا نقوم بإنشاء ملف نصي welcome.txt وإضافة بعض المحتوى كما هو موضح.

Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.

رائع! الآن نحن جاهزون لتنفيذ بعض أوامر Grep والتلاعب بالناتج للحصول على النتائج المرجوة. للبحث عن سلسلة في ملف، قم بتشغيل الأمر أدناه الصيغة

$ grep "string" file name

أو

$ filename grep "string"

مثال:

$ grep "Linux" welcome.txt

النتيجة كما ترون، لم يقوم Grep فقط بالبحث والتطابق مع سلسلة “Linux” ولكنه أيضًا قام بطباعة الأسطر التي تظهر فيها السلسلة. إذا كان الملف موجودًا في مسار ملف مختلف، تأكد من تحديد مسار الملف كما هو موضح أدناه

$ grep "string" /path/to/file

تلوين نتائج Grep باستخدام الخيار –color

إذا كنت تعمل على نظام لا يعرض سلسلة البحث أو النمط بلون مختلف عن بقية النص، استخدم --color لجعل نتائجك تبرز. مثال

$ grep --color "free and opensource" welcome.txt 

الناتج

البحث عن سلسلة بشكل تكراري في جميع الدلائل

إذا كنت ترغب في البحث عن سلسلة في الدليل الحالي وجميع الدلائل الفرعية الأخرى، قم بالبحث باستخدام العلم - r كما هو موضح

$ grep -r "string-name" *

على سبيل المثال

$ grep -r "linux" *

الناتج

تجاهل حساسية الحالة

في المثال أعلاه، أعطت نتائج البحث لدينا ما نريد لأن السلسلة “Linux” تم تحديدها بالأحرف الكبيرة وتوجد أيضًا في الملف بالأحرف الكبيرة. الآن دعونا نحاول البحث عن السلسلة بحروف صغيرة.

$ grep "linux" file name

لا شيء من الناتج، أليس كذلك؟ هذا لأن أمر البحث لم يتمكن من العثور والمطابقة للسلسلة “linux” حيث أن الحرف الأول هو حرف صغير. لتجاهل حساسية الحالة، استخدم العلم -i وقم بتنفيذ الأمر أدناه

$ grep -i "linux" welcome.txt

الناتج رائع أليس كذلك؟ يُستخدم -i عادةً لعرض السلاسل بغض النظر عن حساسية الحالة الخاصة بها.

عد الأسطر التي يتم تطابق السلاسل بها باستخدام الخيار -c

لحساب إجمالي عدد الأسطر التي يظهر فيها نمط السلسلة أو يقع فيها، قم بتنفيذ الأمر أدناه

$ grep -c "Linux" welcome.txt

الناتج

استخدام Grep لعكس الناتج

لعكس إخراج Grep، استخدم العلم -v. الخيار -v يوجه Grep لطباعة جميع الأسطر التي لا تحتوي أو لا تطابق التعبير. الخيار -v يخبر Grep بعكس إخراجه، مما يعني بدلاً من طباعة الأسطر المتطابقة، فعل العكس وطباعة جميع الأسطر التي لا تتطابق مع التعبير. العودة إلى ملفنا، دعونا نعرض أرقام الأسطر كما هو موضح. اضغط على ESC في محرر Vim، اكتب نقطة مدمجة تليها

 set nu

بعد ذلك، اضغط على Enterالناتج الآن، لعرض الأسطر التي لا تحتوي على سلسلة “Linux”، قم بتشغيل

$ grep -v "Linux" welcome.txt

الناتج كما يمكنك أن ترى، قام Grep بعرض الأسطر التي لا تحتوي على نمط البحث.

رقم الأسطر التي تحتوي على نمط البحث باستخدام الخيار -n

لترقيم الأسطر التي يتم فيها تطابق السلسلة، استخدم الخيار -n كما هو موضح

$ grep -n "Linux" welcome.txt

الناتج

البحث عن كلمة مطابقة تمامًا باستخدام الخيار -w

تمرير العلامة -w سيبحث عن السطر الذي يحتوي على الكلمة المطابقة تمامًا كما هو موضح

$ grep -w "opensource" welcome.txt

النتيجة ومع ذلك، إذا حاولت

$ grep -w "open" welcome.txt

لن يتم إرجاع أي نتائج لأننا لا نبحث عن نمط بل عن كلمة محددة تمامًا!

استخدام الأنابيب مع أداة grep

يمكن استخدام أمر grep مع الأنابيب للحصول على نتائج متميزة. على سبيل المثال، إذا كنت ترغب في معرفة ما إذا كان حزمة معينة مثبتة في نظام Ubuntu، قم بتنفيذ

$ dpkg -L | grep "package-name"

على سبيل المثال، لمعرفة ما إذا كانت OpenSSH قد تم تثبيتها في نظامك، استخدم أمر dpkg -l مع أمر grep كما هو موضح

$ dpkg -L | grep -i "openssh"

النتيجة

عرض عدد الأسطر قبل أو بعد نمط البحث باستخدام الأنابيب

يمكنك استخدام -A أو -B لعرض عدد الأسطر التي تسبق أو تأتي بعد سلسلة البحث. تعني علامة -A الأسطر التي تأتي بعد سلسلة البحث وتطبع -B الإخراج الذي يظهر قبل سلسلة البحث. على سبيل المثال

$ ifconfig | grep -A 4 ens3

تعرض هذه الأمر السطر الذي يحتوي على السلسلة بالإضافة إلى 4 أسطر من النص بعد سلسلة ens في أمر ifconfig. الإخراج على العكس، في المثال أدناه، سيؤدي استخدام علامة -B إلى عرض السطر الذي يحتوي على سلسلة البحث بالإضافة إلى 3 أسطر من النص قبل سلسلة ether في أمر ifconfig. الإخراج

$ ifconfig | grep -B 4 ether

استخدام grep مع REGEX – التعابير العادية

مصطلح REGEX هو اختصار لـ REGular EXpression. REGEX هو سلسلة من الأحرف التي تستخدم لمطابقة نمط. فيما يلي بعض الأمثلة:

^      Matches characters at the beginning of a line
$      Matches characters at the end of a line
"."    Matches any character
[a-z]  Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets

مثال لطباعة الأسطر التي تبدأ بحرف معين، الصيغة هي؛

grep ^character file_name

على سبيل المثال، لعرض الأسطر التي تبدأ بالحرف “د” في ملف welcome.txt الخاص بنا، يمكننا تنفيذ

$ grep ^d welcome.txt 

الناتج لعرض الأسطر التي تنتهي بالحرف ‘x’ قم بتشغيل

$ grep x$ welcome.txt

الناتج

الحصول على مساعدة بخيارات Grep أكثر

إذا كنت بحاجة إلى معرفة المزيد حول استخدام أمر Grep، قم بتشغيل الأمر أدناه للحصول على لمحة سريعة عن العلمات الأخرى أو الخيارات التي يمكنك استخدامها مع الأمر.

$ grep --help

الناتج العيني نقدر وقتك لمراجعة هذا البرنامج التعليمي. لا تتردد في تجربة الأوامر وإخبارنا كيف كانت النتيجة.

Source:
https://www.digitalocean.com/community/tutorials/grep-command-in-linux-unix