ذكري المظهر

أمر Grep في نظام التشغيل linux (البحث عن النص في الملفات)

الشرح 643 : تعريب و تغيير لغة تطبيقات الأندرويد دون تغيير لغة الهاتف

الشرح 643 : تعريب و تغيير لغة تطبيقات الأندرويد دون تغيير لغة الهاتف

جدول المحتويات:

Anonim

يعد الأمر grep الذي يشير إلى "طباعة التعبير العادية العالمية" واحدًا من أقوى الأوامر الشائعة الاستخدام في نظام Linux.

يبحث Grep في ملف إدخال واحد أو أكثر عن الخطوط التي تتطابق مع نمط معين وتكتب كل سطر مطابق للإخراج القياسي. إذا لم يتم تحديد أي ملفات ، فإن grep يقرأ من المدخلات القياسية ، والتي عادة ما تكون ناتجة عن أمر آخر.

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

بناء الجملة أمر القيادة

قبل الدخول في كيفية استخدام أمر grep ، دعنا نبدأ بمراجعة بناء الجملة الأساسي.

تأخذ تعبيرات الأداة المساعدة grep بالشكل التالي:

grep PATTERN

العناصر الموجودة بين قوسين مربعين اختيارية.

  • OPTIONS - صفر أو أكثر من الخيارات. يوفر Grep عددًا من الخيارات التي تتحكم في سلوكها. PATTERN - نمط البحث. FILE - صفر أو أكثر من أسماء ملفات الإدخال.

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

كيفية استخدام grep للبحث عن سلسلة في الملفات

الاستخدام الأساسي لأمر grep هو البحث عن سلسلة (نص) في ملف.

على سبيل المثال ، لعرض الأسطر من ملف /etc/passwd يحتوي على bash السلسلة ، يمكنك استخدام الأمر التالي:

grep bash /etc/passwd

يجب أن يبدو الإخراج بشيء من هذا القبيل:

root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash

إذا كانت السلسلة تحتوي على مسافات ، فأنت بحاجة إلى تضمينها بعلامات اقتباس مفردة أو مزدوجة:

grep "Gnome Display Manager" /etc/passwd

عكس المباراة (استبعاد)

لعرض الخطوط التي لا تتطابق مع نقش ، استخدم الخيار -v (أو --invert-match ).

على سبيل المثال لعرض الأسطر من ملف /etc/passwd التي لا تحتوي على السلسلة nologin يمكنك استخدام الأمر التالي:

grep -v nologin /etc/passwd

root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash

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

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

على سبيل المثال ، لمعرفة العمليات التي تعمل على نظامك كمستخدم www-data يمكنك استخدام الأمر ps التالي:

ps -ef | grep www-data

www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process

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

ps -ef | grep www-data | grep -v grep

www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process

بحث متكرر

للبحث بشكل متكرر عن نمط ، استخدم الخيار -r (أو - --recursive ). سيقوم هذا بالبحث من خلال جميع الملفات في الدليل المحدد ، وتخطي الروابط التي تتم مواجهتها بشكل متكرر. لمتابعة جميع الروابط الرمزية ، استخدم الخيار -R (أو --dereference-recursive ).

في المثال التالي ، نبحث عن السلسلة linuxize.com في جميع الملفات داخل الدليل /etc :

grep -r linuxize.com /etc

سيقوم الأمر بطباعة الخطوط المطابقة مسبوقة بالمسار الكامل للملف.

/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;

إذا بدلاً من ذلك - -r ستستخدم -R -r الخيار -R يتبع جميع الروابط الرمزية:

grep -R linuxize.com /etc

لاحظ السطر الأخير من الإخراج. لا يتم طباعة هذا السطر في المثال أعلاه لأن الملفات الموجودة داخل دليل sites-enabled في Nginx هي روابط إلى ملفات التكوين داخل الدليل sites-available .

/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;

عرض فقط اسم الملف

لمنع إخراج grep الافتراضي وطباعة أسماء الملفات التي تحتوي على النموذج المطابق فقط ، يمكنك استخدام الخيار -l (أو --files-with-matches ).

على سبيل المثال للبحث من خلال جميع الملفات التي تنتهي بـ .conf في دليل العمل الحالي وطباعة أسماء الملفات التي تحتوي على سلسلة linuxize.com :

grep -l linuxize.com *.conf

سيظهر الإخراج بشيء من هذا القبيل:

tmux.conf haproxy.conf

عادةً ما يتم استخدام الخيار -l مع الخيار العودية -R :

grep -Rl linuxize.com /tmp

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

افتراضيًا ، يكون الأمر grep حساسًا لحالة الأحرف. هذا يعني أنه يتم التعامل مع الأحرف الكبيرة والصغيرة على أنها مميزة.

لتجاهل الحالة عند البحث ، استخدم الخيار -i (أو --ignore-case ).

على سبيل المثال ، عند البحث عن Zebra دون أي خيار ، لن يُظهر الأمر التالي أي مخرجات ، أي هناك خطوط مطابقة:

grep Zebra /usr/share/words

ولكن إذا قمت بإجراء بحث غير متحسس لحالة الأحرف باستخدام الخيار -i ، فسوف يتطابق مع كل من الأحرف الكبيرة والصغيرة:

grep -i Zebra /usr/share/words

سيؤدي تحديد "Zebra" إلى مطابقة "zebra" أو "ZEbrA" أو أي مجموعة أخرى من الأحرف الكبيرة والصغيرة لهذه السلسلة.

zebra zebra's zebras

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

عند البحث عن "gnu" ، ستطبع grep أيضًا الأسطر التي يكون فيها "gnu" مضمنًا بكلمات أكبر ، مثل "cygnus" أو "magnum".

grep gnu /usr/share/words

cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut

لإرجاع تلك السطور فقط حيث تكون السلسلة المحددة كلمة كاملة (محاطة بأحرف غير كلمة) ، استخدم الخيار -w (أو --word-regexp ).

تتضمن أحرف الكلمات الأحرف الأبجدية الرقمية ( az ، AZ و 0-9 ) 0-9 سفلية ( _ ). تعتبر جميع الشخصيات الأخرى أحرفًا غير كلمة.

grep -w gnu /usr/share/words

gnu

إظهار أرقام الخطوط

لإظهار عدد الخطوط التي تحتوي على سلسلة تتطابق مع نقش ، استخدم الخيار -n (أو --line-number ). عند استخدام هذا الخيار ، ستقوم grep بطباعة المطابقات على الإخراج القياسي مسبوقًا برقم السطر الذي تم العثور عليه عليه.

على سبيل المثال ، لعرض الأسطر من ملف /etc/services يحتوي على bash سلسلة مسبوقة برقم سطر المطابقة ، يمكنك استخدام الأمر التالي:

grep -n 10000 /etc/services

يوضح لنا الناتج الموجود أدناه أن التطابقات موجودة على الخطين 10423 و 10424.

10423:ndmp 10000/tcp 10424:ndmp 10000/udp

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

لطباعة عدد من الخطوط المتطابقة مع الإخراج القياسي ، استخدم الخيار -c (أو - --count ).

في المثال أدناه ، نحسب عدد الحسابات التي لديها /usr/bin/zsh كقذيفة.

grep -c '/usr/bin/zsh' /etc/passwd

4

البحث عن سلاسل متعددة (أنماط)

يمكن ضم نمطين أو أكثر من أنماط البحث باستخدام عامل التشغيل OR | .

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

في المثال أدناه ، نحن نبحث في كل تكرارات الكلمات fatal والخطيرة critical في ملف خطأ سجل Nginx:

grep 'fatal\|error\|critical' /var/log/nginx/error.log

grep -E 'fatal|error|critical' /var/log/nginx/error.log

الوضع الهادئ

يخبر --quiet -q (أو - --quiet ) grep بعدم كتابة أي شيء إلى المحطة الطرفية (الإخراج القياسي). إذا تم العثور على تطابق ، فسيخرج الأمر بالحالة 0 . يعد هذا مفيدًا عند استخدام grep في البرامج النصية shell حيث تريد التحقق مما إذا كان الملف يحتوي على سلسلة وتنفيذ إجراء معين اعتمادًا على النتيجة.

فيما يلي مثال لاستخدام grep في وضع هادئ كأمر اختبار في عبارة if :

if grep -q PATTERN filename then echo pattern found else echo pattern not found fi

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

يحتوي GNU Grep على مجموعتين من ميزات التعبير العادي ، Basic و Extended. بشكل افتراضي ، يفسر grep النمط كتعبير عادي أساسي.

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

  • استخدم الرمز ^ (علامة الإقحام) لمطابقة التعبير في بداية السطر. في المثال التالي ، لن تتطابق السلسلة ^kangaroo إلا في حالة حدوثها في بداية السطر.

    grep "^kangaroo" file.txt

    استخدم الرمز $ (دولار) لمطابقة التعبير في نهاية السطر. في المثال التالي ، لن تتطابق سلسلة kangaroo$ إلا في حالة حدوثها في نهاية السطر.

    grep "kangaroo$" file.txt

    استخدم (فترة) رمز لمطابقة أي حرف واحد. على سبيل المثال ، لمطابقة أي شيء يبدأ بـ kan ثم kan من حرفين وينتهي بسلسلة roo ، يمكنك استخدام النموذج التالي:

    grep "kan..roo" file.txt

    استعمال (الأقواس) لمطابقة أي حرف مفرد محاط بالأقواس. على سبيل المثال ، ابحث عن الخطوط التي تحتوي على accept أو " accent " ، يمكنك استخدام النموذج التالي:

    grep "accet" file.txt

    استعمال (الأقواس) لمطابقة أي حرف مفرد محاط بالأقواس. co(any_letter_except_l)a النموذج التالي مع أي مجموعة من السلاسل التي تحتوي على co(any_letter_except_l)a ، مثل coca cobalt وما إلى ذلك ، ولكنها لن تتطابق مع الخطوط التي تحتوي على cola ،

    grep "coa" file.txt

للهروب من المعنى الخاص للحرف التالي ، استخدم الرمز \ (الخط المائل العكسي).

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

لتفسير النموذج كتعبير منتظم موسع ، استخدم الخيار -E (أو --extended-regexp ). تتضمن التعبيرات العادية الموسعة جميع أحرف التعريف الأساسية ، إلى جانب أحرف التعريف الإضافية لإنشاء أنماط بحث أكثر تعقيدًا وقوة. فيما يلي بعض الأمثلة:

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

    grep -E -o "\b+@+\.{2, 6}\b" file.txt

    مطابقة واستخراج جميع عناوين IP الصالحة من ملف معين:

    grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt

يتم استخدام الخيار -o لطباعة السلسلة المطابقة فقط.

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

لطباعة عدد محدد من الأسطر قبل مطابقة الأسطر ، استخدم الخيار -B (أو --before-context ).

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

grep -B 5 root /etc/passwd

خطوط الطباعة بعد المباراة

لطباعة عدد محدد من الأسطر بعد مطابقة الأسطر ، استخدم الخيار -A (أو --after-context ).

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

grep -A 5 root /etc/passwd

استنتاج

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

هناك الكثير لمعرفة المزيد عن Grep في صفحة دليل مستخدم Grep.

محطة grep