مقدمة
أمر الـgrep
هو واحد من أكثر الأوامر فائدة في بيئة وحدة التحكم في لينكس. يعني اسم grep
“طباعة التعبير العادي العالمي”. هذا يعني أنه يمكنك استخدام grep
للتحقق مما إذا كان المدخل الذي يتلقاه مطابقًا لنمط محدد. هذا البرنامج الذي يبدو تافهًا بشكل واضح هو قوي للغاية؛ فقدرته على فرز المدخلات بناءً على قواعد معقدة تجعله رابطًا شائعًا في العديد من سلاسل الأوامر.
في هذا البرنامج التعليمي، ستكتشف خيارات أمر grep
، ثم ستغوص في استخدام التعابير العادية للبحث عن مزيد من التقنيات المتقدمة.
المتطلبات المسبقة
لمتابعة هذا الدليل، ستحتاج إلى الوصول إلى جهاز كمبيوتر يعمل بنظام تشغيل مبني على لينكس. يمكن أن يكون هذا إما خادم خاص افتراضي قمت بالاتصال به عبر SSH أو جهازك المحلي. لاحظ أن هذا البرنامج التعليمي تم التحقق من صحته باستخدام خادم لينكس يعمل بنظام أوبونتو 20.04، ولكن الأمثلة المقدمة يجب أن تعمل على جهاز يعمل بأي إصدار من أي توزيعة لينكس.
إذا كنت تخطط لاستخدام خادم عن بعد لمتابعة هذا الدليل، فإننا نشجعك على إكمال دليلنا إعداد الخادم الأولي أولاً. سيوفر لك ذلك بيئة خادم آمنة — بما في ذلك مستخدم غير root بامتيازات sudo
وجدار ناري مكون باستخدام UFW — يمكنك استخدامها لبناء مهاراتك في نظام Linux.
الاستخدام الأساسي
في هذا البرنامج التعليمي، ستستخدم grep
للبحث في رخصة جنو العمومية الإصدار 3 عن مختلف الكلمات والعبارات.
إذا كنت على نظام Ubuntu، يمكنك العثور على الملف في مجلد /usr/share/common-licenses
. انسخه إلى مجلدك الرئيسي:
إذا كنت على نظام آخر، استخدم الأمر curl
لتنزيل نسخة:
ستستخدم أيضًا ملف ترخيص BSD في هذا البرنامج التعليمي. في Linux، يمكنك نسخه إلى مجلدك الرئيسي باستخدام الأمر التالي:
إذا كنت على نظام آخر، قم بإنشاء الملف باستخدام الأمر التالي:
الآن بعد أن لديك الملفات، يمكنك البدء في العمل مع grep
.
في أبسط شكل له، تستخدم grep
لمطابقة الأنماط الحرفية ضمن ملف نصي. وهذا يعني أنه إذا قمت بتمرير كلمة لـ grep
للبحث عنها، فسيقوم بطباعة كل سطر في الملف يحتوي على تلك الكلمة.
قم بتنفيذ الأمر التالي لاستخدام الأمر grep
للبحث عن كل سطر يحتوي على كلمة GNU
:
المعامل الأول، GNU
، هو النمط الذي تبحث عنه، في حين أن المعامل الثاني، GPL-3
، هو الملف الذي ترغب في البحث عنه.
سيكون الناتج هو كل سطر يحتوي على نص النمط:
Output GNU GENERAL PUBLIC LICENSE
The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
Developers that use the GNU GPL protect your rights with two steps:
"This License" refers to version 3 of the GNU General Public License.
13. Use with the GNU Affero General Public License.
under version 3 of the GNU Affero General Public License into a single
...
...
على بعض الأنظمة، سيتم تحديد النمط الذي بحثت عنه في الناتج.
الخيارات الشائعة
بشكل افتراضي، سيقوم grep
بالبحث عن النمط المحدد بالضبط داخل الملف الإدخال وإرجاع الأسطر التي يجدها. يمكنك جعل هذا السلوك أكثر فائدة من خلال إضافة بعض العلامات الاختيارية إلى grep
.
إذا كنت ترغب في أن يتجاهل grep
“حالة” معلمة البحث الخاصة بك والبحث عن الإصدارات الكبيرة والصغيرة، يمكنك تحديد الخيار -i
أو --ignore-case
.
ابحث عن كل حالة من كلمة license
(مع الأحرف الكبيرة، الصغيرة، أو المختلطة) في نفس الملف كما هو موضح في الأمر التالي:
النتائج تحتوي: LICENSE
، license
، و License
:
Output GNU GENERAL PUBLIC LICENSE
of this license document, but changing it is not allowed.
The GNU General Public License is a free, copyleft license for
The licenses for most software and other practical works are designed
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price. Our General Public Licenses are designed to make sure that you
(1) assert copyright on the software, and (2) offer you this License
"This License" refers to version 3 of the GNU General Public License.
"The Program" refers to any copyrightable work licensed under this
...
...
إذا كان هناك حالة مع LiCeNsE
، فسيتم إرجاعها أيضًا.
إذا كنت تريد العثور على جميع الأسطر التي لا تحتوي على نمط محدد، يمكنك استخدام الخيار -v
أو --invert-match
.
ابحث عن كل سطر لا يحتوي على كلمة the
في ترخيص BSD باستخدام الأمر التالي:
سوف تتلقى هذا الإخراج:
OutputAll rights reserved.
Redistribution and use in source and binary forms, with or without
are met:
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...
نظرًا لعدم تحديد خيار “تجاهل الحالة”، تم إرجاع العنصرين الأخيرين كعدم احتوائهما على كلمة the
.
غالبًا ما يكون من المفيد معرفة رقم السطر الذي يحدث فيه التطابق. يمكنك القيام بذلك باستخدام الخيار -n
أو --line-number
. أعد تشغيل المثال السابق مع إضافة هذا العلم:
سيُرجع هذا النص:
Output2:All rights reserved.
3:
4:Redistribution and use in source and binary forms, with or without
6:are met:
13: may be used to endorse or promote products derived from this software
14: without specific prior written permission.
15:
16:THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17:ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...
الآن يمكنك الإشارة إلى رقم السطر إذا كنت تريد إجراء تغييرات على كل سطر لا يحتوي على the
. هذا مفيد بشكل خاص عند العمل مع الشفرة المصدرية.
تعابير العادية
في المقدمة، تعلمت أن grep
تعني “طباعة التعبير العادي العالمي”. “تعبير عادي” هو سلسلة نصية تصف نمط بحث معين.
تطبيقات مختلفة ولغات البرمجة تنفذ تعابير العادية بشكل مختلف بعض الشيء. في هذا البرنامج التعليمي، ستكتشف فقط مجموعة صغيرة من الطرق التي يصف بها grep
أنماطه.
التطابقات الحرفية
في الأمثلة السابقة في هذا البرنامج التعليمي، عندما بحثت عن الكلمات GNU
و the
، كنت في الواقع تبحث عن تعبيرات عادية أساسية تتطابق مع سلسلة الأحرف المحددة بالضبط GNU
و the
. الأنماط التي تحدد بالضبط الأحرف المطابقة تسمى “الحرفيات” لأنها تطابق النمط بشكل حرفي، حرفًا بحرف.
من المفيد التفكير في هذه كمطابقة سلسلة من الأحرف بدلاً من مطابقة كلمة. ستصبح هذه التمييز أكثر أهمية كلما تعلمت أنماطًا أكثر تعقيدًا.
جميع الأحرف الأبجدية والرقمية (وكذلك بعض الأحرف الأخرى) يتم مطابقتها بشكل حرفي ما لم يتم تعديلها بواسطة آليات تعبير أخرى.
التطابقات الأنكورية
الأنكورات هي أحرف خاصة تحدد مكانًا معينًا في السطر يجب أن يحدث فيه التطابق ليكون صحيحًا.
على سبيل المثال، باستخدام الأنكورات، يمكنك تحديد أنك ترغب فقط في معرفة الأسطر التي تتطابق مع GNU
في بداية السطر. للقيام بذلك، يمكنك استخدام الأنكور ^
قبل السلسلة الحرفية.
قم بتشغيل الأمر التالي للبحث في ملف GPL-3
والعثور على الأسطر التي تحتوي على كلمة GNU
في بداية السطر:
سيعيد هذا الأمر السطرين التاليين:
OutputGNU General Public License for most of our software; it applies also to
GNU General Public License, you may choose any version ever published
بنفس الطريقة، يمكنك استخدام رمز العلامة النهائية $
في نمط للإشارة إلى أن التطابق سيكون صالحًا فقط إذا وجد في نهاية السطر.
سيطابق هذا الأمر كل سطر ينتهي بكلمة and
في ملف GPL-3
:
ستتلقى هذه النتيجة:
Outputthat there is no warranty for this free software. For both users' and
The precise terms and conditions for copying, distribution and
License. Each licensee is addressed as "you". "Licensees" and
receive it, in any medium, provided that you conspicuously and
alternative is allowed only occasionally and noncommercially, and
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
provisionally, unless and until the copyright holder explicitly and
receives a license from the original licensors, to run, modify and
make, use, sell, offer for sale, import and otherwise run, modify and
مطابقة أي حرف
يتم استخدام النقطة (.) في التعبيرات العادية للدلالة على أن أي حرف واحد يمكن أن يكون موجودًا في الموقع المحدد.
على سبيل المثال، للمطابقة مع أي شيء في ملف GPL-3
يحتوي على حرفين ثم سلسلة cept
، يجب استخدام النمط التالي:
سيعيد هذا الأمر الناتج التالي:
Outputuse, which is precisely where it is most unacceptable. Therefore, we
infringement under applicable copyright law, except executing it on a
tells the user that there is no warranty for the work (except to the
License by making exceptions from one or more of its conditions.
form of a separately written license, or stated as exceptions;
You may not propagate or modify a covered work except as expressly
9. Acceptance Not Required for Having Copies.
...
...
تحتوي هذه النتيجة على حالات لكل من accept
و except
واختلافات الكلمتين. كما سيكون قد تطابق النمط مع z2cept
إذا وُجِدَ ذلك أيضًا.
تعبيرات القوس
من خلال وضع مجموعة من الحروف داخل الأقواس (\[
و \]
)، يمكنك تحديد أن الحرف في تلك الموضع يمكن أن يكون أي حرف يتواجد ضمن مجموعة الأقواس.
على سبيل المثال، للعثور على الأسطر التي تحتوي على too
أو two
، يمكنك تحديد تلك الاختلافات بإيجاز باستخدام النمط التالي:
الناتج يُظهر وجود كلتا الاختلافات في الملف:
Outputyour programs, too.
freedoms that you received. You must make sure that they, too, receive
Developers that use the GNU GPL protect your rights with two steps:
a computer network, with no transfer of a copy, is not conveying.
System Libraries, or general-purpose tools or generally available free
Corresponding Source from a network server at no charge.
...
...
تمنحك علامة الأقواس خيارات مثيرة للاهتمام. يمكنك أن تجعل النمط يتطابق مع أي شيء ما عدا الحروف داخل الأقواس ببدء قائمة الحروف داخل الأقواس بحرف ^
.
هذا المثال مشابه لنمط .ode
، لكنه لن يتطابق مع النمط code
:
إليك الناتج الذي ستحصل عليه:
Output 1. Source Code.
model, to give anyone who possesses the object code either (1) a
the only significant mode of use of the product.
notice like this when it starts in an interactive mode:
لاحظ أنه في السطر الثاني الذي تم إرجاعه، يوجد فعلاً كلمة code
. هذا ليس فشلاً في التعبير العادي أو في برنامج البحث عن النمط. بل تم إرجاع السطر لأنه في وقت سابق من السطر، تم العثور على النمط mode
، الموجود ضمن كلمة model
. تم إرجاع السطر لأنه كان هناك نسخة تطابقت مع النمط.
ميزة أخرى مفيدة لعلامات الأقواس هي أنه يمكنك تحديد نطاق من الحروف بدلاً من كتابة كل حرف متاح بشكل فردي.
هذا يعني أنه إذا كنت تريد العثور على كل سطر يبدأ بحرف كبير، يمكنك استخدام النمط التالي:
إليك الناتج الذي يعيد هذا التعبير:
OutputGNU General Public License for most of our software; it applies also to
States should not allow patents to restrict development and use of
License. Each licensee is addressed as "you". "Licensees" and
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
System Libraries, or general-purpose tools or generally available free
Source.
User Product is transferred to the recipient in perpetuity or for a
...
...
نظرًا لبعض مشاكل الترتيب التقليدية، فمن المعتاد في كثير من الأحيان استخدام فئات الحروف POSIX بدلاً من نطاقات الحروف كما فعلت للتو.
مناقشة كل فئة حروف POSIX ستكون خارج نطاق هذا الدليل، ولكن مثال يحقق نفس الإجراء كما في المثال السابق يستخدم فئة الحروف \[:upper:\]
داخل محدد الأقواس:
سيكون الإخراج هو نفسه كما كان من قبل.
كرر النمط صفر مرات أو أكثر
وأخيرًا، أحد أكثر الرموز التعبيرية استخدامًا هو علامة النجمة، أو *
، التي تعني “كرر الحرف أو التعبير السابق صفر مرات أو أكثر”.
للعثور على كل سطر في ملف GPL-3
الذي يحتوي على فتح وإغلاق القوسين، مع حروف فقط وفراغات فردية بينهما، استخدم التعبير التالي:
ستحصل على الإخراج التالي:
Output Copyright (C) 2007 Free Software Foundation, Inc.
distribution (with or without modification), making available to the
than the work as a whole, that (a) is included in the normal form of
Component, and (b) serves only to enable use of the work with that
(if any) on which the executable work runs, or a compiler used to
(including a physical distribution medium), accompanied by the
(including a physical distribution medium), accompanied by a
place (gratis or for a charge), and offer equivalent access to the
...
...
لقد استخدمت حتى الآن نقاطًا ونجومًا وأحرفًا أخرى في تعبيراتك، ولكن في بعض الأحيان تحتاج إلى البحث عن تلك الأحرف بشكل محدد.
تهرب الرموز التعبيرية
هناك أوقات عندما ستحتاج إلى البحث عن نقطة حرفية أو قوس افتتاحي حرفي، خاصة عند العمل مع ملفات الشفرة المصدرية أو ملفات التكوين. نظرًا لأن هذه الأحرف لها معنى خاص في التعبيرات العادية، فعليك “تهريب” هذه الأحرف لإخبار أداة grep
بأنك لا ترغب في استخدام معناها الخاص في هذه الحالة.
تهرب من الأحرف باستخدام الشرطة العكسية (\
) أمام الحرف الذي من المفترض أن يكون له معنى خاص.
على سبيل المثال، للعثور على أي سطر يبدأ بحرف كبير وينتهي بنقطة، استخدم التعبير التالي الذي يهرب من النقطة النهائية بحيث يمثل نقطة حرفية بدلاً من المعنى “أي حرف” العادي:
هذه هي النتيجة التي ستراها:
OutputSource.
License by making exceptions from one or more of its conditions.
License would be to refrain entirely from conveying the Program.
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
SUCH DAMAGES.
Also add information on how to contact you by electronic and paper mail.
الآن دعنا نلقي نظرة على خيارات التعبير العادي الأخرى.
التعبيرات العادية الموسعة
تدعم أداة grep
لغة تعبيرية عادية أكثر تعقيدًا باستخدام علامة -E
أو باستدعاء أمر egrep
بدلاً من grep
.
تفتح هذه الخيارات إمكانيات “التعبيرات العادية الموسعة”. التعبيرات العادية الموسعة تشمل جميع الأحرف الرئيسية الأساسية، بالإضافة إلى الأحرف الرئيسية الإضافية للتعبير عن مطابقات أكثر تعقيدًا.
التجميع
واحدة من أكثر القدرات المفيدة التي تفتحها التعبيرات العادية الموسعة القدرة على تجميع التعبيرات معًا لتلازمها أو الرجوع إليها كوحدة واحدة.
لتجميع التعبيرات معًا ، قم بوضعها داخل أقواس. إذا كنت ترغب في استخدام الأقواس دون استخدام التعبيرات العادية الموسعة ، يمكنك تهريبها باستخدام علامة الشرطة الخلفية لتمكين هذه الوظيفة. يعني هذا أن العبارات الثلاث التالية مكافئة وظيفيًا:
البديل
على غرار كيفية تحديد تعابير القوس يمكن أن تحدد خيارات مختلفة ممكنة لتطابق الحرف الفردي ، يسمح البديل بتحديد تطابقات بديلة للسلاسل أو مجموعات التعابير.
للإشارة إلى البديل ، استخدم رمز الخط العمودي |
. غالبًا ما يتم استخدام هذه داخل التجميع بين الأقواس لتحديد أن واحدة من اثنين أو أكثر من الاحتمالات يجب أن تعتبر تطابقًا.
سيجد ما يلي إما GPL
أو ترخيص الجمهور العام
في النص:
تبدو النتيجة مثل هذا:
Output The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price. Our General Public Licenses are designed to make sure that you
Developers that use the GNU GPL protect your rights with two steps:
For the developers' and authors' protection, the GPL clearly explains
authors' sake, the GPL requires that modified versions be marked as
have designed this version of the GPL to prohibit the practice for those
...
...
يمكن للبديل اختيار بين أكثر من اثنين من الخيارات عن طريق إضافة خيارات إضافية داخل مجموعة الاختيار مفصولة بواسطة رموز الخط العمودي الإضافية (|
).
الكميات
مثل الرمز الوصفي *
الذي يتطابق مع الحرف السابق أو مجموعة الأحرف صفر مرات أو أكثر، هناك رموز وصفية أخرى متاحة في تعبيرات العبارات العادية الموسعة التي تحدد عدد الحدوثات.
للتطابق مع حرف مرة واحدة أو صفر مرات، يمكنك استخدام الرمز ?
. يجعل هذا الحرف أو مجموعات الأحرف التي تسبقه اختيارية، في الجوهر.
يطابق ما يلي copyright
و right
بوضع copy
في مجموعة اختيارية:
ستحصل على هذه النتيجة:
Output Copyright (C) 2007 Free Software Foundation, Inc.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
"Copyright" also means copyright-like laws that apply to other kinds of
...
الرمز +
يتطابق مع تعبير مرة واحدة على الأقل. هذا تقريباً مثل الرمز الوصفي *
، ولكن مع الرمز +
، يجب أن يتطابق التعبير مرة واحدة على الأقل.
التعبير التالي يتطابق مع السلسلة free
بالإضافة إلى حرف واحد أو أكثر ليسوا من الفراغات البيضاء:
سترى هذه النتيجة:
Output The GNU General Public License is a free, copyleft license for
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
When we speak of free software, we are referring to freedom, not
have the freedom to distribute copies of free software (and charge for
you modify it: responsibilities to respect the freedom of others.
freedomss that you received. You must make sure that they, too, receive
protecting users' freedom to change the software. The systematic
of the GPL, as needed to protect the freedom of users.
patents cannot be used to render the program non-free.
تحديد تكرار التطابق
لتحديد عدد مرات تكرار القالب، استخدم أحرف القوس المتعرج ({
و }
). تتيح لك هذه الأحرف تحديد عدد دقيق، أو نطاق، أو حدًا أعلى أو أدنى لعدد المرات التي يمكن للتعبير أن يتطابق معها.
استخدم التعبير التالي للعثور على جميع الأسطر في ملف GPL-3
التي تحتوي على ثلاثة حروف متتالية:
تعود كل سطر معاد إرجاعه إلى كلمة تحتوي على ثلاثة حروف متتالية:
Outputchanged, so that their problems will not be attributed erroneously to
authors of previous versions.
receive it, in any medium, provided that you conspicuously and
give under the previous paragraph, plus a right to possession of the
covered work so as to satisfy simultaneously your obligations under this
لمطابقة أي كلمات تحتوي على ما بين 16 و 20 حرفًا، استخدم التعبير التالي:
إليك إخراج هذا الأمر:
Output certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
c) Prohibiting misrepresentation of the origin of that material, or
يتم عرض الأسطر فقط التي تحتوي على كلمات داخل تلك الطول.
الاستنتاج
grep
مفيد في العثور على أنماط داخل الملفات أو داخل تسلسل النظام الملفاتي، لذا فمن الجدير بالوقت قضاء بعض الوقت للتعود على خياراته وبنية جمله.
تعتبر التعابير العادية أكثر مرونة، ويمكن استخدامها مع العديد من البرامج الشهيرة. على سبيل المثال، تقوم العديد من محررات النصوص بتنفيذ التعابير العادية للبحث عن النصوص واستبدالها.
علاوة على ذلك، تستخدم معظم لغات البرمجة الحديثة التعابير العادية لأداء الإجراءات على قطع البيانات الخاصة. بمجرد فهمك للتعابير العادية، ستتمكن من نقل هذه المعرفة إلى العديد من المهام الشائعة المتعلقة بالحاسوب، من القيام بعمليات بحث متقدمة في محرر النصوص الخاص بك إلى التحقق من صحة إدخال المستخدم.