ابحث عن النصوص واستخرجها باستخدام grep

grep هي اداه سهله الفهم متوفره علي جمعيع انظمه تشغيل لينكس

اداه grep هي اداه تستخدم للبحث عن البيانات النصيه وايجادها بسرعه ودقه

نظره سريعه علي استخدام اداه grep

في هذا المثال سنفترض ان لدينا ملف نصي باسم test_file.txt ويحتوي علي النص التالي

وبعدها سنقوم بتجربه grep علي هذا الملف

#bash
[ma@linux-distro ~]$ grep the test_file.txt 
#output
The weather is really good today
these are my favorite days in the week

يمكنك النظر علي الصوره التاليه لايضاح ناتج عمليه البحث من خلال اداه grep
grep-first-ans
من خلال المثال السابق يمكننا ان نستنتج ان الاداه تضع حاله الاحرف في الحسبان

تثبيت الاداه علي نظام التشغيل

اداه grep تاتي بشكل افتراضي مع معظم انظمه لينكس لكن اذا لم تكن مثبته علي نظامك يمكنك تثتيتها من خلال الاوامر التاليه مع مراعاه نظام التشغيل الخاص بك

#Debian/Ubuntu  
$ sudo apt-get install grep
#RHEL/CentOS/Fedora
$ sudo yum install grep
#Arch/Manjaro
$ sudo pacman -S grep 

شرح الاداه

ملاحظه: سوف نطبق شرح الاداه بالاستعانه بالمثال السابق

  • البحث عن كلمه واحده (ذات مقطع واحد)

[ma@linux-distro ~]$ grep the test_file.txt
The weather is really good today
these are my favorite days in the week

grep-ans1

grep ==> في المثال السابق هو اسم الاداه والذي يجب كتابته لاستخدامها

the ==> تمثل النص الذي نحاول البحث عنه باستخدام grep

test_file.txt ==> يمثل المستند النصي الذي نريد البحث في داخله

  • البحث عن جمله (ذات اكثر من مقطع واحد)

[ma@linux-distro ~]$ grep "The weather" test_file.txt # يمكننا ان نلاحظ اننا كتبنا(The) بدلا من (the)
The weather is really good today

 “the weather” ==> هي جمله وبها مسافه ولذلك يجب علينا استخدام علامتين التنصيص ( “” ) او علامه التنصيص الواحده (‘’)

grep-ans2

شرح بعض الخيارات المفيده للاداه

1. خيار i- يستخدم لجعل الاداه تهمل حاله الاحرف

من خلال الامثله السابقه يمكننا ملاحظه ان اداه grep تضح حاله الاحرف في الحسبان
ولكن يمكننا استخدام خيار من خيارات الاداه لجعلها تبحث بدون مراعاه حاله الاحرف

[ma@linux-distro ~]$ grep -i the test_file.txt # نلاحظ استخدام الخيار i قبل الكلمه او الجمله المراد البحث عنها
The weather is really good today 
these are my favorite days in the week

ملاحظه: يتم كتابه الخيارات بعد اسم الاداه واضافه - ليكون الخيار بالشكل بهذا الشكل -i

grep-ans3

2. خيار n- يستخدم لجلب رقم الاسطر التي وجدت بها الكلمه \ الكلمات المراده

من خلال الامثله السابقه كان من السهل علينا ادارك ان هذه الاداه تقوم بالبحث داخل الملف وتقوم باعلامنا اذا وجدت الكلمه دون ان تخبرنا بمكانها داخل هذا الملف لذلك اذا اردنا معرفه مكان القطعه النصيه المراده يمكننا ذلك عن طريق هذا الخيار
[ma@linux-distro ~]$ grep -n the test_file.txt
7:The weather is really good today
9:these are my favorite days in the week

grep-ans4

اذن السطر رقم 7 و السطر رقم 9 هما الاسطر التي يتواجد بها النمط النصي الذي قمنا بالبحث عنه

3. خيار w- يستخدم للبحث فقط عن ما يطابق الكلمه \ الكلمات

من خلال هذا الاختيار يمكننا ان نجد نمط نصي بعينه فقط
[ma@linux-distro ~]$ grep -w the test_file.txt
these are my favorite days in the week

grep-ans5

4. خيارr- يستخدم للبحث بداخل الملفات

اذا استخدمنا هذا الخيار فيمكن ل grep البحث عن النمط المراد لكن بداخل المسار الذي سوف نحدده

ملاحظه: بافتراض ان ملف test_file.txt موجود الان في المسار التالي Downloads/test-dir/test_file.txt

[ma@linux-distro ~]$ grep -r the Downloads/test-dir
Downloads/test-dir/test_file.txt:The weather is really good today
Downloads/test-dir/test_file.txt:these are my favorite days in the week

grep-ans6

يمكنك الاجابه علي هذا السؤال لتتاكد من فهمك للاداه و الخيارات التي تم شرحها

 بافتراض اننا الان بداخل مجلد مساره هو Downloads/test-dir يحتوي علي العديد من المستندات النصيه ونريد التالي

  1. نريد ان نبحث بداخل هذا المجلد عن كلمه معينه بيعنها فقط وهي كلمه the
  2. نريد من الاداه ان تهمل حاله الاحرف
  3. نريد من الاداه ان تظهر رقم الاسطر للكلمه المراد البحث عنها
الاجابه
[ma@linux-distor test-dir]$ grep -iwnr the . 

و في النهايه يمكنك ان تعرف المزيد عن خيارات الاداه عن طريق كتابه الامر

[ma@linux-distor ~]$ grep --help

المصادر

مستودع الاداه علي Git

ترخيص

هذا الموضوع يتبع ترخيص جميع مواضيع أسس هو CC-BY-SA 4.0

هذا الموضوع فائز بجائزة أسس للكتابة

هذا الموضوع فائز بجائزة أسس للكتابة وهي اول جائزة عربية مخصصة للكتابة عن البرمجيات الحرة والمفتوحة.

الموضوع متوفر على مدونة gnulinuxsa هنا:

إعجابَين (2)

بارك الله فيك. الأداة ليست سهلة . لذيها إستخدامات متقدمة لا يستغلها الكثير . ربما الإستخدامات الشائعة سهلة .

الإجابة عن السؤال :slight_smile:

$ mkdir -p Downloads/test-dir
$ touch Downloads/test-dir/test_file.txt
$ vim Downloads/test-dir/test_file.txt

 $ grep -in "the" Downloads/test-dir/test_file.txt
1:The weather is really good today
2:these are my favorite days in the week
إعجاب واحد (1)

اعلم ان الاداه لها استخدامات متقدمه لكني لم اتطرق في شرحي لاي شئ معقد و الغرض من هذا المقال هوا شرح الاستخدامات الشائعه السهله للاداه

بالنسبه للسؤال فحمدا لله انتبهت لوجود خطء في الاجابه نفسها وهي انني قمت بكتابه مسار المجلد الذي من المفترض اني بداخله وهذا خطء

ولذلك استبدلتها ب . وهي ترمز لمجلد العمل الحالي

إجابتك صحيحه ايضا باركك الله ولا غبار عليها

لكن النسبه للسؤال ففي اول نقطه كنت اقصد منها ان تستخدم r-
وذلك للبحث بداخل هذا المجلد بالتحديد و لاظهار اسم الملف الذي وجدت به الكلمه المراده
وعندما ذكرت انني اريد ان ابحث عن كلمه معينه بعينها كنت اعني استخدام w- وذلك للبحث عن نمط نصي معين

اعلم انه كان يجب علي الايضاح اكثر في السؤال ولكني لم ارد ان يكون السؤال طويلا جدا وشكرا جزيلا علي تعليقك علي المقال اخي.

إعجاب واحد (1)

بالنسبة للاحقة r- تبحث بعمق . المسار الحالي و ما تحته.
و بالنسبة للاحقة w- تحتاج تحدد المسار للملف لتبحث عن الكلمة . إذا وضعت فقط إسم نجلد لن تنجح العملية.
يوجد بديل آخر للاحقة r- و هي لاحقة d- recurse تقوم بنفس العمل .

$ grep -d recurse "hello" tmp             tmp/testtext:hello nation                   tmp/testtext:hello world                    tmp/testtext:hello folks

$ grep -r  "hello" tmp                    tmp/testtext:hello nation                   tmp/testtext:hello world                    tmp/testtext:hello folks

$ grep -w  "hello" tmp                    
grep: tmp: Is a directory 

$ grep -w  "hello" tmp/testtext           
hello nation                                
hello world                                 
hello folks
إعجاب واحد (1)

شكرا جدا اخي علي اضافتك الجميله

من الحيل الجميلة أيضا. طباعة فقط رابط المستودع من ملف sources.list.

grep -P "^\s*deb\s+" /etc/apt/sources.list | grep -oP 'https?://[^\s]+'
http://ports.ubuntu.com/ubuntu-ports
http://ports.ubuntu.com/ubuntu-ports
http://ports.ubuntu.com/ubuntu-ports

من الخاصيات الجميلة لهذه الأداة .لاحقة B- .تفيد لطباعة أسطر قبل النمط الذي نبحث عنه . مثال:

cat sample-test.txt       
                 
age: 10                                           
country: United States                            
city: New York
name: John  
                                                                                        age: 27                                           
country: Canada
city: Toronto                                     
name: Robert    
                                                                                    age: 32                                           
country: Mexico                                   
city: Guadalajara                                 
name: Pedro

مثال إسم بيدرو

grep -B3 "Pedro" sample-test.txt           

age: 32
country: Mexico
city: Guadalajara
name: Pedro