عند تشغيل بعض الأوامر في لينكس لقراءة أو تحرير النص من سلسلة أو ملف، نحاول في كثير من الأحيان تصفية الإخراج إلى قسم معين مهم. هنا تأتي فائدة استخدام التعابير العادية.
ما هي التعابير العادية؟
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: مطابقة الأسطر التي تحتوي على ‘localhost’ في الملف
عندما يتم تعيين نمط localhost
، سيقوم Awk بمطابقة السطر الذي يحتوي على localhost في الملف /etc/hosts
.
awk '/localhost/{print}' /etc/hosts

استخدام Awk مع (.) البارز في نمط
سيقوم (.)
بمطابقة السلاسل التي تحتوي على loc، localhost، localnet كما هو موضح في المثال أدناه.
هذا يعني * l حرف مفرد أي ما يلي c *.
awk '/l.c/{print}' /etc/hosts

استخدام Awk مع (*) الحرف في نمط
سيقوم بمطابقة السلاسل التي تحتوي على localhost، localnet، lines، capable، كما في المثال أدناه:
awk '/l*c/{print}' /etc/localhost

ستدرك أيضًا أن (*)
يحاول الحصول على أطول تطابق ممكن يمكنه اكتشافه.
لنلق نظرة على حالة توضح ذلك، خذ التعبير العادي 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

المثال التالي يطابق السلاسل التي تبدأ بـ K
أو k
تليها T
:
# awk '/[Kk]T/{print}' /etc/hosts

تحديد الأحرف في نطاق معين
فهم الأحرف باستخدام awk:
[0-9]
يعني رقم واحد[a-z]
يعني مطابقة حرف صغير واحد[A-Z]
يعني مطابقة حرف كبير واحد[a-zA-Z]
يعني مطابقة حرف واحد[a-zA-Z 0-9]
يعني مطابقة حرف أو رقم واحد
دعنا نلقي نظرة على مثال أدناه:
awk '/[0-9]/{print}' /etc/hosts

جميع السطور من الملف /etc/hosts يحتوي على الأقل على رقم واحد [0-9]
في المثال أعلاه.
استخدم Awk مع (^) الحرف الفارغ
يطابق جميع الأسطر التي تبدأ بالنمط المُعطى كما في المثال أدناه:
# awk '/^fe/{print}' /etc/hosts # awk '/^ff/{print}' /etc/hosts

استخدم Awk مع ($) الحرف الفارغ
يطابق جميع الأسطر التي تنتهي بالنمط المُعطى:
awk '/ab$/{print}' /etc/hosts awk '/ost$/{print}' /etc/hosts awk '/rs$/{print}' /etc/hosts

استخدم Awk مع (\) الحرف الهروب
يتيح لك أخذ الحرف الذي يليه كحرف حرفي، يعني اعتباره كما هو.
في المثال أدناه، الأمر الأول يقوم بطباعة كل الأسطر في الملف، والأمر الثاني لا يطبع شيئاً لأنني أريد مطابقة سطر يحتوي على $25.00، ولكن لم يتم استخدام الحرف الهروب.
الأمر الثالث صحيح لأنه تم استخدام الحرف الهروب لقراءة $ كما هو.
awk '//{print}' deals.txt awk '/$25.00/{print}' deals.txt awk '/\$25.00/{print}' deals.txt

الملخص
هذا ليس كل شيء مع أداة تصفية سطر الأوامر awk، الأمثلة أعلاه هي العمليات الأساسية لـ awk. في الأجزاء القادمة، سنتقدم في كيفية استخدام الميزات المعقدة لـ awk.
شكرًا لقراءتكم ولأي إضافات أو توضيحات، يُرجى نشر تعليق في قسم التعليقات.
Source:
https://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/