ديف أوبس

استخدامات متقدمة للمحرر Sed

استخدامات متقدمة للمحرِّر Sed في نظام لينكس

يعد المحرِّر sed من الأدوات القوية في نظام لينكس ويستخدم بشكل رئيسي لمعالجة النصوص وتحريرها بطريقة غير تفاعلية. يعتبر sed أداة سطر أوامر (Command Line) تستخدم لتعديل محتوى الملفات أو النصوص بطريقة مرنة وسريعة. على الرغم من أنه قد يكون معروفًا عند البعض كأداة لتحرير النصوص البسيط، إلا أن هناك العديد من الاستخدامات المتقدمة التي يمكن من خلالها الاستفادة القصوى من هذه الأداة. في هذا المقال، سنتناول مجموعة من الاستخدامات المتقدمة لـ sed في نظام لينكس.

1. استبدال النصوص باستخدام تعبيرات عادية (Regular Expressions)

إحدى الوظائف الأساسية للمحرِّر sed هي استبدال النصوص، لكن ما يميز sed هو دعمه الكامل للتعبيرات العادية، مما يتيح للمستخدم إجراء عمليات بحث واستبدال معقدة باستخدام أنماط مرنة.

مثال:

إذا كنت ترغب في استبدال كل كلمة “apple” بـ “orange” في ملف نصي:

bash
sed 's/apple/orange/g' file.txt

لكن باستخدام التعبيرات العادية، يمكنك البحث عن أنماط أكثر تعقيدًا. على سبيل المثال، استبدال أي كلمة تبدأ بالحرف “a”:

bash
sed 's/\ba\w*/fruit/g' file.txt

في هذا المثال، تم استخدام التعبير العادي \ba\w* للبحث عن أي كلمة تبدأ بحرف “a” واستبدالها بـ “fruit”.

2. التعامل مع الملفات متعددة الأسطر

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

مثال:

لنفترض أنك ترغب في دمج السطر الحالي مع السطر التالي:

bash
sed 'N; s/\(.*\)\n\(.*\)/\1 \2/' file.txt

في هذا المثال، يقوم N بقراءة السطر التالي إلى السطر الحالي، ثم يقوم التعبير العادي \(.*\)\n\(.*\) بالدمج بين السطرين واستبدالهما بجملة واحدة.

3. إضافة النصوص على الأسطر المحددة

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

مثال:

لإضافة نص في بداية الملف:

bash
sed '1i\This is the first line' file.txt

لإضافة نص بعد السطر 3:

bash
sed '3a\This text is added after line 3' file.txt

4. حذف الأسطر بناءً على شروط معينة

يعد حذف الأسطر في sed أمرًا مفيدًا عندما ترغب في إزالة أسطر معينة من الملف بناءً على محتوى أو نمط معين. يمكن أيضًا تحديد أسطر بعينها باستخدام الأرقام أو النمط.

مثال:

لحذف السطر 2:

bash
sed '2d' file.txt

لحذف الأسطر التي تحتوي على كلمة “error”:

bash
sed '/error/d' file.txt

إذا كنت ترغب في حذف كل الأسطر من السطر 5 حتى نهاية الملف:

bash
sed '5,$d' file.txt

5. استخدام sed مع الأنابيب (Pipes) لمعالجة النصوص في الوقت الفعلي

يتيح لك sed دمج عمليات التحرير مع الأنابيب (Pipes) في لينكس بحيث يمكنك تحويل وتحرير النصوص بشكل تفاعلي في الوقت الفعلي.

مثال:

افترض أنك ترغب في استخدام sed لتعديل النصوص أثناء قراءة مخرجات أمر آخر، مثل أمر ls:

bash
ls -l | sed 's/\.txt/\.md/'

في هذا المثال، سيتم استبدال امتداد .txt بـ .md في مخرجات أمر ls.

6. استخدام sed مع ملفات الإدخال والإخراج

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

مثال:

لحفظ التعديلات في ملف جديد:

bash
sed 's/apple/orange/g' file.txt > new_file.txt

لتعديل الملف الأصلي مباشرة باستخدام الخيار -i:

bash
sed -i 's/apple/orange/g' file.txt

7. استبدال النصوص باستخدام متغيرات

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

مثال:

bash
word="apple" sed "s/$word/orange/g" file.txt

في هذا المثال، يتم استخدام متغير word ليحل محله كلمة apple في التعبير العادي.

8. استخدام sed للتعامل مع الملفات الكبيرة

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

مثال:

لتعديل جميع الأسطر في ملف ضخم يحتوي على أكثر من مليون سطر، يمكنك استخدام sed بفعالية دون التأثير الكبير على أداء النظام:

bash
sed -i 's/old_word/new_word/g' large_file.txt

9. استخدام sed لتطبيق تعديلات متعددة في وقت واحد

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

مثال:

لتطبيق تعديلات متعددة على نفس الملف:

bash
sed -e 's/apple/orange/g' -e 's/banana/grape/g' file.txt

في هذا المثال، يتم إجراء تعديلين: استبدال “apple” بـ “orange” و “banana” بـ “grape”.

10. تغيير تنسيق التاريخ باستخدام sed

يعد تعديل تنسيق التاريخ من الاستخدامات المتقدمة الشائعة لـ sed. يمكنك تحويل التاريخ من تنسيق إلى آخر باستخدام تعبيرات عادية مناسبة.

مثال:

لنفترض أنك ترغب في تغيير تاريخ من تنسيق YYYY-MM-DD إلى DD/MM/YYYY:

bash
sed 's/\([0-9]*\)-\([0-9]*\)-\([0-9]*\)/\3\/\2\/\1/' file.txt

في هذا المثال، يتم استخدام التعبيرات العادية لإعادة ترتيب الأجزاء المختلفة من التاريخ.

11. استخدام sed لتحويل النصوص إلى حالة الحروف الكبيرة أو الصغيرة

يمكنك استخدام sed لتحويل النصوص من الحروف الصغيرة إلى الكبيرة أو العكس.

مثال:

لتحويل النص إلى أحرف كبيرة:

bash
sed 's/.*/\U&/' file.txt

لتحويل النص إلى أحرف صغيرة:

bash
sed 's/.*/\L&/' file.txt

12. التعامل مع التعابير العادية متعددة الأسطر

أحد الاستخدامات المتقدمة هو التعامل مع النصوص التي تمتد عبر عدة أسطر باستخدام sed. يمكن استخدام التعابير العادية لتحديد وتحويل النصوص الممتدة على أكثر من سطر.

مثال:

لحذف كل الأسطر الفارغة:

bash
sed '/^$/d' file.txt

الخاتمة

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