كيفية تصفية النص أو السلسلة باستخدام Awk والتعبيرات العادية – الجزء 1

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

ما هي التعابير العادية؟

A regular expression can be defined as strings that represent several sequences of characters. One of the most important things about regular expressions is that they allow you to filter the output of a command or file, edit a section of a text or configuration file, and so on.

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

التعابير العادية مكونة من:

  • الأحرف العادية مثل المسافة، وشرطة سفلية (_)، A-Z، a-z، 0-9.
  • الأحرف الفارقة التي يتم توسيعها لتصبح أحرفًا عادية تشمل:
    • (.) يتطابق مع أي حرف فردي ما عدا السطر الجديد.
    • (*) يتطابق مع الصفر أو أكثر من وجود الحرف الذي يسبقه مباشرةً.
    • [ character(s) ] يتطابق مع أي من الأحرف المحددة في الحروف، يمكن أيضًا استخدام علامة الشرطة (-) لتعني مجموعة من الأحرف مثل [a-f]، [1-5]، وهكذا.
    • ^ يتطابق مع بداية سطر في ملف.
    • $ يتطابق مع نهاية السطر في ملف.
    • \ هو حرف الهروب.

لتصفية النص، يجب على الشخص استخدام أداة تصفية النص مثل awk. يمكنك التفكير في awk كلغة برمجة خاصة بها. ولكن بالنسبة لنطاق هذا الدليل لاستخدام awk، سنغطيها كأداة تصفية بسيطة على سطر الأوامر command line filtering tool.

الصيغة العامة لـ awk هي:

awk 'script' filename

حيث 'script' هو مجموعة من الأوامر التي يفهمها awk ويتم تنفيذها على الملف، اسم_الملف.

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

الـ 'script' عبارة عن '/pattern/ action' حيث الـ pattern هو تعبير منتظم والـ action هو ما سيفعله awk عندما يجد النمط المعطى في سطر ما.

كيفية استخدام أداة التصفية Awk في لينكس

في الأمثلة التالية، سنركز على الأحرف الوصفية التي ناقشناها أعلاه ضمن ميزات awk.

طباعة جميع الأسطر من الملف باستخدام Awk

في المثال أدناه، يتم طباعة جميع الأسطر في الملف /etc/hosts لأنه لم يتم تحديد أي نمط.

awk '//{print}'/etc/hosts
Awk Prints All Lines in a File

استخدام أنماط Awk: مطابقة الأسطر التي تحتوي على ‘localhost’ في الملف

عندما يتم تعيين نمط localhost، سيقوم Awk بمطابقة السطر الذي يحتوي على localhost في الملف /etc/hosts.

awk '/localhost/{print}' /etc/hosts 
Awk Print Given Matching Line in a File

استخدام Awk مع (.) البارز في نمط

سيقوم (.) بمطابقة السلاسل التي تحتوي على loc، localhost، localnet كما هو موضح في المثال أدناه.

هذا يعني * l حرف مفرد أي ما يلي c *.

awk '/l.c/{print}' /etc/hosts
Use Awk to Print Matching Strings in a File

استخدام Awk مع (*) الحرف في نمط

سيقوم بمطابقة السلاسل التي تحتوي على localhost، localnet، lines، capable، كما في المثال أدناه:

awk '/l*c/{print}' /etc/localhost
Use Awk to Match Strings in File

ستدرك أيضًا أن (*) يحاول الحصول على أطول تطابق ممكن يمكنه اكتشافه.

لنلق نظرة على حالة توضح ذلك، خذ التعبير العادي t*t الذي يعني مطابقة السلاسل التي تبدأ بالحرف t وتنتهي بالحرف t في السطر أدناه:

this is tecmint, where you get the best good tutorials, how to's, guides, tecmint. 

ستحصل على الاحتمالات التالية عند استخدام النمط /t*t/:

this is t
this is tecmint
this is tecmint, where you get t
this is tecmint, where you get the best good t
this is tecmint, where you get the best good tutorials, how t
this is tecmint, where you get the best good tutorials, how tos, guides, t
this is tecmint, where you get the best good tutorials, how tos, guides, tecmint

و (*) في /t*t/ الحرف المتساوي يسمح لـ awk باختيار الخيار الأخير:

this is tecmint, where you get the best good tutorials, how to's, guides, tecmint

استخدام Awk مع مجموعة [حرف(حروف)]

خذ على سبيل المثال المجموعة [al1]، هنا سيقوم awk بمطابقة جميع السلاسل التي تحتوي على الحرف a أو l أو 1 في سطر في الملف /etc/hosts.

awk '/[al1]/{print}' /etc/hosts
Use-Awk to Print Matching Character in File

المثال التالي يطابق السلاسل التي تبدأ بـ K أو k تليها T:

# awk '/[Kk]T/{print}' /etc/hosts 
Use Awk to Print Matched String in File

تحديد الأحرف في نطاق معين

فهم الأحرف باستخدام awk:

  • [0-9] يعني رقم واحد
  • [a-z] يعني مطابقة حرف صغير واحد
  • [A-Z] يعني مطابقة حرف كبير واحد
  • [a-zA-Z] يعني مطابقة حرف واحد
  • [a-zA-Z 0-9] يعني مطابقة حرف أو رقم واحد

دعنا نلقي نظرة على مثال أدناه:

awk '/[0-9]/{print}' /etc/hosts 
Use Awk To Print Matching Numbers in File

جميع السطور من الملف /etc/hosts يحتوي على الأقل على رقم واحد [0-9] في المثال أعلاه.

استخدم Awk مع (^) الحرف الفارغ

يطابق جميع الأسطر التي تبدأ بالنمط المُعطى كما في المثال أدناه:

# awk '/^fe/{print}' /etc/hosts
# awk '/^ff/{print}' /etc/hosts
Use Awk to Print All Matching Lines with Pattern

استخدم Awk مع ($) الحرف الفارغ

يطابق جميع الأسطر التي تنتهي بالنمط المُعطى:

awk '/ab$/{print}' /etc/hosts
awk '/ost$/{print}' /etc/hosts
awk '/rs$/{print}' /etc/hosts
Use Awk to Print Given Pattern String

استخدم Awk مع (\) الحرف الهروب

يتيح لك أخذ الحرف الذي يليه كحرف حرفي، يعني اعتباره كما هو.

في المثال أدناه، الأمر الأول يقوم بطباعة كل الأسطر في الملف، والأمر الثاني لا يطبع شيئاً لأنني أريد مطابقة سطر يحتوي على $25.00، ولكن لم يتم استخدام الحرف الهروب.

الأمر الثالث صحيح لأنه تم استخدام الحرف الهروب لقراءة $ كما هو.

awk '//{print}' deals.txt
awk '/$25.00/{print}' deals.txt
awk '/\$25.00/{print}' deals.txt
Use Awk with Escape Character
الملخص

هذا ليس كل شيء مع أداة تصفية سطر الأوامر awk، الأمثلة أعلاه هي العمليات الأساسية لـ awk. في الأجزاء القادمة، سنتقدم في كيفية استخدام الميزات المعقدة لـ awk.

شكرًا لقراءتكم ولأي إضافات أو توضيحات، يُرجى نشر تعليق في قسم التعليقات.

Source:
https://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/