مطابقة الأنماط باستخدام ميزات Bash

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث

مدى المحارف Character Ranges

خلافًا لأمر grep والتعابير النمطية (regular expressions) فإن لدينا حالات كثيرة لمطابقة الأنماط التي يمكنك إجراؤها في الصدفة مباشرة دون الحاجة إلى استخدام برنامج خارجي، فلعلك تعلم أن محرفي * و ? يطابقان أي نص أو محرف وحيد -على الترتيب-، ومن أجل مطابقة هذين المحرفيْن تحديدًا، ضع حول كل منهما علامات اقتباس مزدوجة:

hsoub ~> touch "*"

hsoub ~> ls "*"
*

يمكنك استخدام الأقواس المربعة لمطابقة أي محرف أو مجموعة محارف بداخل تلك الأقواس إن فُصلت أزواج المحارف بشَرطة -، انظر المثال التالي الذي يعرض كل الملفات التي تبدأ بأحد الحروف التالية: a، b، c، x، y، z في مجلد المنزل الخاص بالمستخدم hsoub:

hsoub ~> ls -ld [a-cx-z]*
drwxr-xr-x    2 hsoub	 hsoub		4096 Jul 20  2002 app-defaults/
drwxrwxr-x    4 hsoub    hsoub          4096 May 25  2002 arabic/
drwxrwxr-x    2 hsoub    hsoub          4096 Mar  4 18:30 bin/
drwxr-xr-x    7 hsoub    hsoub          4096 Sep  2  2001 crossover/
drwxrwxr-x    3 hsoub    hsoub          4096 Mar 22  2002 xml/

إن كان أول محرف بين القوسين هو ! أو ^ فسيطابَق أي محرف غير موجود بين القوسيْن، ولمطابَقة الشَّرطة -، أدخِلها كأول أو آخر محرف في المجموعة، ويعتمد التصنيف على الإعدادات المحلية (locale) الحالية وعلى قيمة متغير LC_COLLATE -إن ضُبط على قيمة-، لاحظ أن الإعدادات المحلية الأخرى قد تفسر [a-cx-z] على أنها [aBbCcXxYyZz] إن كان التصنيف وفقًا لترتيب القاموس، وإن كنت تريد التأكد من تفسير المدى بالشكل التقليدي فاضبط LC_COLLATE أو LC_ALL على C.

فئات المحارف

يمكن تحديد فئات المحارف بين أقواس مربعة وفقًا للبنية اللغوية [:CLASS:] حيث تُعرَّف CLASS داخل معيار POSIX وتكون لها إحدى القيّم التالية: alnum - alpha - ascii - blank - cntrl - digit - graph - lower - print - punct - space - upper - word - xdigit.

أمثلة:

hsoub ~> ls -ld [[:digit:]]*
drwxrwxr-x    2 hsoub	hsoub		4096 Apr 20 13:45 2/

cathy ~> ls -ld [[:upper:]]*
drwxrwxr--    3 hsoub   hsoub           4096 Sep 30  2001 Nautilus/
drwxrwxr-x    4 hsoub   hsoub           4096 Jul 11  2002 OpenOffice.org1.0/
-rw-rw-r--    1 hsoub   hsoub         997376 Apr 18 15:39 Schedule.sdc

تُعرَّف عدة معامِلات مطابقة أنماط ممتدة (extended pattern matching operators) عند تفعيل خيار extglob باستخدام أمر shopt، انظر صفحات دليل info، قسم مزايا الصدفة الأساسية (basic shell features) > توسعات الصدفة (shell expansions) > توسع اسم الملف (filename expansion) > مطابقة الأنماط (pattern matching).

انظر أيضًا

مصادر