16 أمثلة لأوامر grep لمساعدتك في العالم الحقيقي

نشرت: 2021-02-23

يعد grep ، الذي تم تطويره في الأصل للأنظمة المستندة إلى Unix ، أحد أكثر أدوات سطر الأوامر استخدامًا في مربعات Linux.

يأتي اسمها من أمر مشابه آخر في أداة ed ، أي g / re / p الذي يرمز إلى g lobally البحث عن تعبير re gular وخطوط مطابقة p rint. يبحث grep بشكل أساسي عن نمط معين أو تعبير عادي من إدخال أو ملف قياسي ويطبع الأسطر التي تطابق المعايير المحددة. غالبًا ما يتم استخدامه لتصفية التفاصيل غير الضرورية أثناء طباعة المعلومات المطلوبة فقط من ملفات السجلات الكبيرة.

تتحد قوة التعبير العادي مع الخيارات المدعومة في grep مما يجعل هذا ممكنًا.

سنغطي هنا بعض أوامر grep شائعة الاستخدام في سيناريوهات مختلفة بواسطة مسؤول النظام أو المطور.

اذا هيا بنا نبدأ…

صيغة الأمر grep

يتوقع الأمر grep نمطًا ووسائط اختيارية مع قائمة ملفات إذا تم استخدامها بدون أنابيب.

 $ grep [options] pattern [files]

مثال بسيط هو:

 $ grep my file.txt my_file $

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

يتيح لك grep البحث عن النمط المحدد ليس فقط في ملف واحد ولكن في ملفات متعددة. إليك كيفية البحث عن نمط في ملفات متعددة باستخدام * wildcard.

 $ sudo grep -i err /var/log/messages*

انتاج:

 $ sudo grep err /var/log/messages* /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11) /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11) /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11) /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter. /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter. /var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message. /var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message. $

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

بحث غير حساس لحالة الأحرف

يقدم grep البحث عن نمط دون النظر إلى حالة النمط. استخدم علامة -i لإخبار grep بتجاهل الحالة.

 $ grep -i [pattern] [file]

انتاج:

 $ grep -i it text_file.txt This is a sample text file. It contains functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $

البحث عن كلمة كاملة

ليس الأمر دائمًا أننا نريد مطابقة جزئية ولكن بدلاً من ذلك نتوقع أن يتطابق grep مع كلمة كاملة فقط. يمكنك فعل ذلك بعلم -w .

 $ grep -w [pattern] [file]

انتاج:

 $ grep -w is text_file.txt This is a sample text file. It contains This is a sample text file. It's repeated two times. $

تحقق من عدد المطابقة

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

 $ grep -c [pattern] [file]

انتاج:

 $ grep -c is text_file.txt 2 $

بحث في الدلائل الفرعية

غالبًا ما تكون هناك حاجة للبحث عن الملفات ليس فقط في دليل العمل الحالي ولكن أيضًا في الدلائل الفرعية. يتيح لك grep القيام بذلك بسهولة باستخدام علم -r .

 $ grep -r [pattern] *

انتاج:

 $ grep -r Hello * dir1/file1.txt:Hello One dir1/file2.txt:Hello Two dir1/file3.txt:Hello Three $

كما يمكنك أن تلاحظ ، يمر grep عبر كل دليل فرعي داخل دليل حالي ويسرد الملفات والأسطر التي يوجد بها تطابق.

البحث العكسي

إذا كنت ترغب في العثور على شيء لا يتطابق مع نمط معين ، فإن grep يسمح بالقيام بذلك باستخدام علامة -v .

 $ grep -v [pattern] [file]

انتاج:

 $ grep This text_file.txt This is a sample text file. It contains This is a sample text file. It's repeated two times. $ grep -v This text_file.txt several lines to be used as part of testing grep functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $

يمكنك مقارنة إخراج الأمر grep على نفس النمط والملف بعلامة -v وبدونها. باستخدام -v ، تتم طباعة أي خطوط لا تتطابق مع النمط.

طباعة أرقام الخطوط

يتيح لك grep طباعة أرقام الأسطر جنبًا إلى جنب مع الأسطر المطبوعة مما يسهل معرفة مكان السطر في الملف. استخدم الخيار -n كما هو موضح للحصول على أرقام الأسطر في الإخراج.

 $ grep -n [pattern] [file]

انتاج:

 $ grep -n This text_file.txt 1:This is a sample text file. It contains 7:This is a sample text file. It's repeated two times. $

الحد من إخراج grep

بالنسبة للملفات الكبيرة مثل السجلات وما إلى ذلك ، يمكن أن يكون إخراج grep طويلًا وقد تحتاج فقط إلى عدد ثابت من الأسطر في الإخراج بدلاً من مطابقة كل شيء. يمكننا استخدام - m[num] لتحديد الأسطر المطبوعة بعدد. إليك كيفية استخدامه:

 $ grep -m[num] [pattern] [file]

لاحظ كيف يؤثر استخدام علامة -m على إخراج grep لنفس مجموعة الشروط في المثال أدناه:

 $ grep It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $ grep -m2 It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as $

عرض سطور إضافية

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

من الممكن طباعة سطر أعلى أو أسفل (أو كليهما) خط به نمط باستخدام grep باستخدام العلامات -A أو -B أو -C مع قيمة num . يشير num هنا إلى عدد الأسطر الإضافية المطلوب طباعتها والتي تكون أعلى أو أسفل السطر المطابق مباشرةً. هذا ينطبق على جميع التطابقات التي يعثر عليها grep في الملف المحدد أو قائمة الملفات.

 $ grep -A[num] [pattern] [file]

أو

 $ grep -B[num] [pattern] [file]

أو

 $ grep -C[num] [pattern] [file]

يُظهر الإخراج أدناه إخراج grep العادي بالإضافة إلى الإخراج باستخدام العلم -A و -B و -C واحدًا تلو الآخر. لاحظ كيف يفسر grep العلامات وقيمها والتغييرات في الإخراج المعني. مع العلم -A1 ، يطبع grep سطرًا واحدًا يتبع السطر المطابق مباشرةً.

وبالمثل ، مع العلم -B1 ، فإنه يطبع سطرًا واحدًا قبل السطر المطابق مباشرةً. مع العلم -C1 ، تطبع سطرًا واحدًا قبل وبعد سطر المطابقة.

 $ grep numbers text_file.txt It supports numbers like 1, 2, 3 etc. as well as $ grep -A1 numbers text_file.txt It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $ grep -B1 numbers text_file.txt kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as $ grep -C1 numbers text_file.txt kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $

سرد أسماء الملفات

لطباعة اسم الملفات فقط حيث يوجد نمط بدلاً من الأسطر المتطابقة بالفعل ، استخدم علامة -l .

 $ grep -l [pattern] [file]

فيما يلي مثال على التشغيل:

 $ grep -l su *.txt file.txt text_file.txt $

طباعة الأسطر بالضبط

نحتاج أحيانًا إلى طباعة سطور تتطابق تمامًا مع نمط معين ، وليس جزءًا منه. يسمح grep بعلامة -x للقيام بذلك.

 $ grep -x [pattern] [file]

في المثال أدناه ، يحتوي ملف file.txt على سطر به كلمة واحدة فقط "دعم" وعلى هذا النحو يتم مطابقته بـ grep مع علامة -x مع تجاهل الأسطر التي قد تحتوي على الكلمات "دعم" مع نص آخر.

 $ grep -x support *.txt file.txt:support $

سلسلة بدء المباراة

باستخدام التعبيرات النمطية ، يمكننا إيجاد سلسلة في بداية السطر. هيريس كيفية القيام بذلك.

 $ grep [options] "^[string]" [file]

مثال:

 $ grep It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $ grep ^It text_file.txt It supports numbers like 1, 2, 3 etc. as well as $

لاحظ كيف يؤدي استخدام الحرف ^ إلى تغيير الإخراج. ^ يشير إلى بداية السلسلة و grep مطابق ^It أي سطر يبدأ بالكلمة It . يمكن أن يساعد تضمين علامات الاقتباس عندما يحتوي النمط على مسافات وما إلى ذلك.

سلسلة نهاية المباراة

هناك تعبير عادي مفيد شائع وهو مطابقة نهاية نمط الخط.

 $ grep [options] "[string]$" [file]

مثال:

 $ grep "\." text_file.txt This is a sample text file. It contains functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. This is a sample text file. It's repeated two times. $ grep "\.$" text_file.txt kind of data but it works best with text data. alphabets and special characters like - + * # etc. This is a sample text file. It's repeated two times. $

حاولنا مطابقة أ . حرف في نهاية السطر. نظرًا لأن النقطة (.) هي شخصية ذات معنى خاص ، فنحن بحاجة إلى الهروب منها بـ \ حرف. لاحظ مرة أخرى كيف يختلف الناتج عندما نتطابق فقط . الحرف وعندما نستخدم $ لتوجيه grep لمطابقة هذه الأسطر التي تنتهي بـ . (ليست تلك التي قد تحتوي عليها في أي مكان بينهما).

استخدم ملف النمط

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

 $ grep -f [pattern_file] [file_to_match]

في مثالنا ، أنشأنا أسماء ملفات النمط pattern.txt بالمحتويات التالية:

 $ cat pattern.txt This It $

لاستخدامه ، استخدم العلم -f .

 $ grep -f pattern.txt text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $

حدد أنماطًا متعددة

يسمح grep بتحديد أنماط متعددة باستخدام علم -e .

 $ grep -e [pattern1] -e [pattern2] -e [pattern3]...[file]

مثال:

 $ grep -e is -e It -e to text_file.txt This is a sample text file. It contains several lines to be used as part of testing grep It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $

حدد Extended RegEx

يدعم grep أيضًا التعبيرات العادية الموسعة أو ERE باستخدام علامة -E . هذا مشابه لأمر egrep في Linux.

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

 $ grep -E '[Extended RegEx]' [file]

إليك استخدام واحد لـ ERE حيث نريد طباعة الأسطر التي لم يتم التعليق عليها أو فارغة. هذا مفيد بشكل خاص للعثور على شيء ما في ملفات التكوين الكبيرة. لقد استخدمت أيضًا علامة -v طباعة الأسطر المطابقة للنمط '^(#|$)' .

 $ sudo grep -vE '^(#|$)' /etc/ssh/sshd_config HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key SyslogFacility AUTHPRIV AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication yes ChallengeResponseAuthentication no GSSAPIAuthentication yes GSSAPICleanupCredentials no UsePAM yes X11Forwarding yes AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS Subsystem sftp /usr/libexec/openssh/sftp-server $

استنتاج

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

ارجع إلى صفحتها الرئيسية لقراءة المزيد عنها.

 $ man grep

بعد ذلك ، تعرف على أمثلة أوامر SFTP.