1. كتابة الصيغ الإعتيادية

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

تكتب الصيغة الإعتيادية وفق أحد الأشكال:

# الكتابة الاولية
/search_this/modifiers
# مثال
grep "a.*s" document.txt

# الكتابة الثانية
command/search_this/replace_with/modifiers
# مثال
sed "s/all/any/g" < document.txt

 

  1. الصيغ الإعتيادية تتعامل مع أسطر الملف

 

لا يجب أن نغفل على أن الصيغ الإعتيادية تتعامل مع الملف سطرا بسطر، أي أنها تقوم بالبحث سطرا تلو الآخر. فبالإمكان وضع صيغ إعتيادية تشير لبداية السطر ^ أو نهايته $، مثلا كل السطور التي تبدأ بحرف c و تنتهي بh  :

grep "^c.*h$" < document.txt

 

لاحظوا أننا في المثال أعلاه إستعملنا *. ( نقطة نجمة)، النقطة تعني "أي رمز كان" و النجمة تعني "أي عدد من المرات كان"، ليعني المجموع "أي سلسلة من الرموز"  و هذا ما ينقلنا لدراسة تكرار الرموز في الفقرة الموالية.

 

  1. التعامل مع التكرار في الصيغ الإعتيادية

 

أحد أهم وسائل تحسين قدرات البحث هو إستعمال الرمز '.' نقطة الذي يعوض أي رمز آخر. إذا كنا مثلا نبحث عن كل السطور التي تبتدئ ب abc متبوعة برمز واحد أيا كان متبوعة بفراغ (space) فإننا سنستعمل النقطة لتعويض الرمز "أيا كان" كما يلي:

grep "^abc. " document.txt

أما إذا أردنا البحث عن السطور التي تبتدئ ب abc متبوعة بأي سلسلة كانت متبوعة بفراغ (space) فنكتب

grep "^abc.* " document.txt

في هذه الحالة الأخيرة *. تعني "أي سلسلة من الرموز كانت" بما فيها تلك التي طولها 0. بمعنى أن صيغتنا الإعتيادية ستشمل كذلك الصيغة abc متوبعة بفراغ (" abc").

عموما بإمكاننا تحديد عدد المرات التي يتكرر فيها رمز معين بإستعمال الكتابة :

المعنى الرمز
0 مرة أو أكثر *
0 أو 1 مرة \?
1 مرة أو أكثر \+

بل هناك كتابة أشمل على الشكل {min,max} لتصبح * مكافئة ل {,0}، و ? مكافئة ل {0,1}، و + مكافئة ل {,1}

لكن ماذا إذا أردنا البحث عن صيغ تحتوي هذه الرموز . و ?\ و * و غيرها؟ هذا تماما ما سنتطرق له في الفقرة الموالية "رمز الإنقاذ"

 

  1. رمز الإنقاذ \

الرموز . و * و غيرها تسمى رموزا خاصة، لأنها تستعمل لتوصيف الصيغ الإعتيادية، لذلك عندما نبحث عنها يجب أن نسبقها برمز الإنقاذ. مثلا للبحث عن النقطة نكتب .\ و بذلك لن يعتبر المفسر نقطتنا جزئا يجب تفسيره، بل سيزيح عنه رمز الإنقاذ و يتركه كما هو. و للبحث عن الرمز \ نكتب \\ بإعتباره نفسه رمزا خاصا.