استخدام grep (و egrep) مع التعبيرات العادية

Using Grep With Regular Expressions



يصف هذا البرنامج التعليمي كيفية استخدام كليهما سيطرةegrep) ر o البحث عن نص في الملفات ، بشكلها البسيط وعند دمجها مع التعبيرات العادية. يحتوي على عدة أمثلة و تمارين ، أكثر حلول ، لكي يكمل المشاهد.

الاسم سيطرة يأتي من الأمر g / re / p ed (و vim) ، مما يعني البحث عالميًا عن تعبير عادي معين وطباعة (عرض) الإخراج.







عادي التعبيرات

تسمح الأدوات المساعدة للمستخدم بالبحث في الملفات النصية عن الأسطر التي تطابق التعبير العادي ( التعبير العادي ). التعبير العادي عبارة عن سلسلة بحث مكونة من نص واحد أو أكثر من 11 حرفًا خاصًا. مثال بسيط هو مطابقة بداية السطر.



ملف عينة

الشكل الأساسي لـ سيطرة يمكن استخدامها للعثور على نص بسيط داخل ملف أو ملفات معينة. لتجربة الأمثلة ، قم أولاً بإنشاء ملف العينة.



استخدم محررًا مثل nano أو vim لنسخ النص أدناه في ملف يسمى ملفي .





xyz
xyzde
exyzd
dexyz
د؟ gxyz
xxz
xzz
س ض
س * ض
xz
س ض
س ص ع
س ص ع
س ص
xyyz
xyyyz
xyyyyz

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

قبل تجربة الأمثلة ، اعرض نموذج الملف:



$قطملفي

بحث بسيط

للعثور على النص 'xyz' داخل الملف ، قم بتشغيل ما يلي:

$سيطرةxyz myfile

باستخدام الألوان

لعرض الألوان ، استخدم –color (واصلة مزدوجة) أو ببساطة قم بإنشاء اسم مستعار. على سبيل المثال:

$سيطرة --لونxyz myfile

أو

$الاسم المستعار سيطرة= 'سيطرة--لون'
$سيطرةxyz myfile

خيارات

الخيارات الشائعة المستخدمة مع سيطرة الأمر يشمل:

  • -أجد كل الخطوط بغض النظر من القضية
  • عدد كم عدد الأسطر التي تحتوي على النص
  • -n خط العرض أعداد مطابقة الخطوط
  • عرض -l فقط ملف الأسماء تلك المباراة
  • -r العودية البحث في الدلائل الفرعية
  • -v تجد كل الخطوط ليس تحتوي على النص

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

$سيطرة -أناxyz myfile# البحث عن نص بغض النظر عن الحالة

$سيطرة -icxyz myfile# عد الأسطر مع النص

$سيطرة -فيxyz myfile# إظهار أرقام الخطوط

إنشاء ملفات متعددة

قبل محاولة البحث عن عدة ملفات ، قم أولاً بإنشاء عدة ملفات جديدة:

$رما - طرد - قذفxyz>ملفي 1
$رما - طرد - قذف xyz nxzz nXYZ>ملفي 2
$رما - طرد - قذف xxx nyyy>ملفي 3
$قطملفي 1
$قطملفي 2
$قطملفي 3

ابحث عن عدة ملفات

للبحث في ملفات متعددة باستخدام أسماء الملفات أو حرف بدل ، أدخل:

$سيطرة -icxyz myfile myfile1 myfile2 myfile3
$سيطرة -فيxyz بلدي*
# أسماء ملفات مطابقة تبدأ بـ 'my'

تمرين أنا

  1. قم أولاً بحساب عدد الأسطر الموجودة في الملف / etc / passwd.
تلميح: استخدممرحاض -ال /إلخ/passwd
  1. الآن ابحث عن كل تكرارات النص أين في الملف / etc / passwd .
  2. ابحث عن عدد الأسطر الموجودة في الملف التي تحتوي على النص
  3. ابحث عن عدد الأسطر التي لا تحتوي على النص أين .
  4. ابحث عن إدخال تسجيل الدخول الخاص بك في / etc / passwd

يمكن العثور على حلول التمرين في نهاية هذه المقالة.

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

الامر سيطرة يمكن أيضًا استخدامها مع التعبيرات العادية باستخدام واحد أو أكثر من أحد عشر حرفًا أو رمزًا خاصًا لتحسين البحث. التعبير العادي هو سلسلة أحرف تتضمن أحرفًا خاصة للسماح بمطابقة النمط ضمن الأدوات المساعدة مثل سيطرة و انا قد جئت و سيد . لاحظ أنه قد يلزم تضمين السلاسل بين علامتي اقتباس.

الشخصيات الخاصة المتاحة تشمل:

^ بداية السطر
$ نهاية السطر
. أي حرف (باستثناء n سطر جديد)
* 0 أو أكثر من التعبير السابق
قبل الرمز يجعله حرفيا

لاحظ أن * ، والتي يمكن استخدامها في سطر الأوامر لمطابقة أي عدد من الأحرف بما في ذلك لا شيء ، هو ليس تستخدم بنفس الطريقة هنا.

لاحظ أيضًا استخدام علامات الاقتباس في الأمثلة التالية.

أمثلة

للعثور على جميع الأسطر التي تبدأ بالنص باستخدام الحرف ^:

$سيطرة'^ xyz' ملفي

للعثور على جميع الأسطر التي تنتهي بنص باستخدام الحرف $:

$سيطرة'xyz $' ملفي

للعثور على الأسطر التي تحتوي على سلسلة تستخدم الأحرف ^ و $ معًا:

$سيطرة'^ xyz $' ملفي

للعثور على خطوط باستخدام . لتتناسب مع أي شخصية:

$سيطرة'^ x.z' ملفي

للعثور على أسطر باستخدام * لمطابقة 0 أو أكثر من التعبير السابق:

$سيطرة'^ س ص*z 'ملفي

للعثور على سطور باستخدام. * لمطابقة 0 أو أكثر من أي حرف:

$سيطرة'^ X.*z 'ملفي

للعثور على خطوط باستخدام للهروب من الحرف *:

$سيطرة'^ X *z 'ملفي

للعثور على استخدام الحرف :

$سيطرة'\' ملفي

التعبير grep - egrep

ال سيطرة يدعم الأمر فقط مجموعة فرعية من التعبيرات العادية المتاحة. ومع ذلك ، فإن الأمر egrep:

  • يسمح بالاستخدام الكامل لجميع التعبيرات النمطية
  • قد يبحث في نفس الوقت عن أكثر من تعبير واحد

لاحظ أنه يجب تضمين التعبيرات داخل زوج من علامات الاقتباس.

لاستخدام الألوان ، استخدم اللون أو أنشئ اسمًا مستعارًا مرة أخرى:

$الاسم المستعار egrep='egrep --color'

من أجل البحث عن أكثر من واحد regex ال egrep يمكن كتابة الأمر عبر أسطر متعددة. ومع ذلك ، يمكن القيام بذلك أيضًا باستخدام هذه الأحرف الخاصة:

| التناوب ، إما واحد أو آخر
(...) التجميع المنطقي لجزء من التعبير
$egrep '(^ root | ^ uucp | ^ mail)' /إلخ/passwd

يؤدي هذا إلى استخراج الأسطر التي تبدأ بـ root أو uucp أو mail من الملف | رمز يعني أي من الخيارات.

الأمر التالي سوف ليس العمل ، على الرغم من عدم عرض أي رسالة ، منذ الأساسي سيطرة لا يدعم الأمر كل التعبيرات النمطية:

$سيطرة '(^ root | ^ uucp | ^ mail)' /إلخ/passwd

ومع ذلك ، في معظم أنظمة Linux الأمر grep -E هو نفس استخدام egrep :

$سيطرة '(^ root | ^ uucp | ^ mail)' /إلخ/passwd

استخدام المرشحات

الأنابيب هي عملية إرسال إخراج أحد الأوامر كمدخل إلى أمر آخر وهي واحدة من أقوى أدوات Linux المتاحة.

غالبًا ما يشار إلى الأوامر التي تظهر في خط الأنابيب على أنها مرشحات نظرًا لأنها في كثير من الحالات تقوم بفحص أو تعديل المدخلات التي تم تمريرها إليها قبل إرسال الدفق المعدل إلى الإخراج القياسي.

في المثال التالي ، الإخراج القياسي من ls -l يتم تمريره كمدخل قياسي إلى ملف سيطرة أمر. الإخراج من سيطرة ثم يتم تمرير الأمر كمدخل إلى ملف أكثر أمر.

سيعرض هذا فقط الدلائل بتنسيق /إلخ :

$ls -ال /إلخ|سيطرة'^ د'|أكثر

الأوامر التالية هي أمثلة على استخدام المرشحات:

$ملاحظة -ef|سيطرةكرون

$من الذى|سيطرةkdm

ملف عينة

لتجربة تمرين المراجعة ، قم أولاً بإنشاء ملف العينة التالي.

استخدم محررًا مثل nano أو vim لنسخ النص أدناه في ملف يسمى اشخاص:

شخصية J.Smith 25000
شخصية إي سميث 25400
تدريب أ. براون 27500
تدريب C.Browen 23400
(المشرف) R.Bron 30500
جودسوت تي سميث 30000
شخصية ف جونز 25000
التدريب * C.Evans 25500
جودسوت دبليو بوب 30400
الطابق الأرضي تي سميث 30500
شخصية J.Maler 33000

التمرين الثاني

  1. اعرض الملف اشخاص وفحص محتوياته.
  2. ابحث عن جميع الأسطر التي تحتوي على السلسلة حداد تلميح: استخدم الأمر grep لكن تذكر أنه بشكل افتراضي حساس لحالة الأحرف.
  3. قم بإنشاء ملف جديد ، npeople ، يحتوي على جميع الأسطر التي تبدأ بالسلسلة شخصي تلميح: استخدم الأمر grep مع>.
  4. قم بتأكيد محتويات الملف n الأشخاص عن طريق سرد الملف.
  5. الآن قم بإلحاق جميع الأسطر التي ينتهي بها النص بالسلسلة 500 في ملف الأشخاص إلى الملف npeople. تلميح: استخدم الأمر grep مع >>.
  6. مرة أخرى ، قم بتأكيد محتويات الملف n الأشخاص من خلال سرد الملف.
  7. ابحث عن عنوان IP الخاص بالخادم المخزن في الملف / etc / hosts تلميح: استخدم الأمر grep مع $ (hostname)
  8. يستخدم egrep لاستخراج من / etc / passwd ملف يحتوي على خطوط حساب ليرة لبنانية أو الخاص بك معرف المستخدم .

يمكن العثور على حلول التمرين في نهاية هذه المقالة.

المزيد من التعبيرات العادية

يمكن اعتبار التعبير النمطي بمثابة أحرف البدل على المنشطات.

هناك أحد عشر حرفًا لها معاني خاصة: الأقواس المربعة للفتح والإغلاق [] ، والشرطة المائلة للخلف ، وعلامة الإقحام ^ ، وعلامة الدولار $ ، والنقطة أو النقطة. ، والشريط العمودي أو رمز الأنبوب | ، وعلامة الاستفهام؟ ، و النجمة أو النجمة * وعلامة الجمع + وقوس الفتح والإغلاق الدائري {}. غالبًا ما تسمى هذه الأحرف الخاصة أيضًا بالحروف الأولية.

إليك المجموعة الكاملة من الأحرف الخاصة:

^ بداية السطر
$ نهاية السطر
. أي حرف (باستثناء n سطر جديد)
* 0 أو أكثر من التعبير السابق
| التناوب ، إما واحد أو آخر
[...] مجموعة صريحة من الأحرف لمطابقتها
+ 1 أو أكثر من التعبير السابق
؟ 0 أو 1 من التعبير السابق
قبل الرمز يجعله حرفيا
{…} تدوين الكمي صريح
(...) التجميع المنطقي لجزء من التعبير

الإصدار الافتراضي من سيطرة لديه دعم محدود فقط للتعبير العادي. لكي تعمل جميع الأمثلة التالية ، استخدم egrep بدلا من ذلك أو grep -E .

للعثور على خطوط باستخدام | لمطابقة أي من التعبيرين:

$egrep'xxz|xzz 'ملفي

للعثور على خطوط باستخدام | لمطابقة أي من التعبيرين داخل سلسلة ، استخدم أيضًا ():

$egrep'^ X(Yz|yz)' ملفي

للعثور على سطور باستخدام [] لمطابقة أي حرف:

$egrep'^ X[ص]z 'ملفي

للعثور على الأسطر باستخدام [] لعدم مطابقة أي حرف:

$egrep'^ X[^ ص]z 'ملفي

للعثور على أسطر باستخدام * لمطابقة 0 أو أكثر من التعبير السابق:

$egrep'^ س ص*z 'ملفي

للعثور على أسطر باستخدام + لمطابقة 1 أو أكثر من التعبير السابق:

$egrep'^ xy + z' ملفي

للعثور على خطوط باستخدام؟ لمطابقة 0 أو 1 من التعبير السابق:

$egrep'^ xy؟ z' ملفي

التمرين الثالث

  1. ابحث عن جميع الأسطر التي تحتوي على الأسماء إيفانز أو دهان في ملف الناس.
  2. ابحث عن جميع الأسطر التي تحتوي على الأسماء سميث ، سميث أو سميث في ملف الناس.
  3. ابحث عن جميع الأسطر التي تحتوي على الأسماء براون ، بروين أو مصدر في ملف الأشخاص ، إذا كان لديك وقت:
  4. ابحث عن السطر الذي يحتوي على السلسلة (مشرف)، بما في ذلك الأقواس ، في ملف الناس.
  5. ابحث عن السطر الذي يحتوي على الحرف * في ملف الأشخاص.
  6. اجمع 5 و 6 أعلاه لإيجاد كلا التعبيرين.

مزيد من الأمثلة

للعثور على خطوط باستخدام . و * لمطابقة أي مجموعة من الأحرف:

$egrep'^ س ص.*z 'ملفي

للعثور على سطور باستخدام {} لمطابقة عدد N من الأحرف:

$egrep'^ س ص{3}z 'ملفي
$egrep'^ س ص{4}z 'ملفي

للعثور على سطور باستخدام {} لمطابقة N أو مرات أكثر:

$egrep'^ س ص{3و}z 'ملفي

للعثور على أسطر باستخدام {} لمطابقة N مرة ولكن ليس أكثر من M مرة:

$egrep'^ س ص{2و3}z 'ملفي

استنتاج

في هذا البرنامج التعليمي نظرنا لأول مرة في استخدام سيطرة في شكل بسيط للعثور على نص في ملف أو في ملفات متعددة. ثم قمنا بدمج النص المراد البحث عنه باستخدام تعبيرات نمطية بسيطة ثم استخدام تعابير أكثر تعقيدًا egrep .

الخطوات التالية

آمل أن تستخدم المعرفة المكتسبة هنا للاستخدام الجيد. جرب أو حاول سيطرة الأوامر الموجودة على بياناتك الخاصة وتذكر ، يمكن استخدام التعبيرات العادية كما هو موضح هنا بنفس النموذج في نحن و سيد و awk !

حلول التمرين

تمرين أنا

قم أولاً بحساب عدد الأسطر الموجودة في الملف / etc / passwd .
$ wc -l /etc/passwd
الآن ابحث عن كل تكرارات النص أين في الملف / etc / passwd.
$ grep var /etc/passwd
ابحث عن عدد الأسطر الموجودة في الملف التي تحتوي على النص أين

سيطرة أين/إلخ/passwd

ابحث عن عدد الأسطر التي لا تحتوي على النص أين .

سيطرة -السيرة الذاتيةأين/إلخ/passwd

ابحث عن إدخال تسجيل الدخول الخاص بك في / etc / passwd ملف
grep kdm /etc/passwd

التمرين الثاني

اعرض الملف اشخاص وفحص محتوياته.
$ cat people
ابحث عن جميع الأسطر التي تحتوي على السلسلة حداد في الملف اشخاص .
$ grep 'Smith' people
قم بإنشاء ملف جديد ، الناس ، التي تحتوي على جميع الأسطر التي تبدأ بالسلسلة شخصي في ال اشخاص ملف
$ grep '^Personal' people> npeople
قم بتأكيد محتويات الملف الناس من خلال سرد الملف.
$ cat npeople
الآن قم بإلحاق جميع الأسطر التي ينتهي بها النص بالسلسلة 500 في الملف اشخاص إلى الملف الناس .
$ grep '500$' people>>npeople
مرة أخرى ، قم بتأكيد محتويات الملف الناس من خلال سرد الملف.
$ cat npeople
ابحث عن عنوان IP الخاص بالخادم المخزن في الملف / etc / hosts .
$ grep $(hostname) /etc/hosts
يستخدم egrep لاستخراج من / etc / passwd ملف يحتوي على خطوط حساب ليرة لبنانية أو معرف المستخدم الخاص بك.
$ egrep '(lp|kdm:)' /etc/passwd

التمرين الثالث

ابحث عن جميع الأسطر التي تحتوي على الأسماء إيفانز أو دهان في الملف اشخاص .
$ egrep 'Evans|Maler' people
ابحث عن جميع الأسطر التي تحتوي على الأسماء حداد و سميث أو سميث في الملف اشخاص .
$ egrep 'Sm(i|y)the?' people
ابحث عن جميع الأسطر التي تحتوي على الأسماء بنى و بروين أو مصدر في ملف الناس.
$ egrep 'Brow?e?n' people
ابحث عن السطر الذي يحتوي على السلسلة (مشرف)، بما في ذلك الأقواس ، في الملف اشخاص .

$egrep '(مشرف)'اشخاص

ابحث عن السطر الذي يحتوي على الحرف * في ملف الناس.
$ egrep '*' people
اجمع 5 و 6 أعلاه لإيجاد كلا التعبيرين.

$egrep ' (المسؤول ) | *'اشخاص