ما هو 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