استخدامات متقدمة للمحرِّر Sed في نظام لينكس
يعد المحرِّر sed من الأدوات القوية في نظام لينكس ويستخدم بشكل رئيسي لمعالجة النصوص وتحريرها بطريقة غير تفاعلية. يعتبر sed أداة سطر أوامر (Command Line) تستخدم لتعديل محتوى الملفات أو النصوص بطريقة مرنة وسريعة. على الرغم من أنه قد يكون معروفًا عند البعض كأداة لتحرير النصوص البسيط، إلا أن هناك العديد من الاستخدامات المتقدمة التي يمكن من خلالها الاستفادة القصوى من هذه الأداة. في هذا المقال، سنتناول مجموعة من الاستخدامات المتقدمة لـ sed في نظام لينكس.
1. استبدال النصوص باستخدام تعبيرات عادية (Regular Expressions)
إحدى الوظائف الأساسية للمحرِّر sed هي استبدال النصوص، لكن ما يميز sed هو دعمه الكامل للتعبيرات العادية، مما يتيح للمستخدم إجراء عمليات بحث واستبدال معقدة باستخدام أنماط مرنة.
مثال:
إذا كنت ترغب في استبدال كل كلمة “apple” بـ “orange” في ملف نصي:
bashsed 's/apple/orange/g' file.txt
لكن باستخدام التعبيرات العادية، يمكنك البحث عن أنماط أكثر تعقيدًا. على سبيل المثال، استبدال أي كلمة تبدأ بالحرف “a”:
bashsed 's/\ba\w*/fruit/g' file.txt
في هذا المثال، تم استخدام التعبير العادي \ba\w* للبحث عن أي كلمة تبدأ بحرف “a” واستبدالها بـ “fruit”.
2. التعامل مع الملفات متعددة الأسطر
عادةً ما يعمل sed مع سطر واحد في كل مرة، لكن يمكن استخدامه أيضًا لمعالجة النصوص التي تمتد عبر عدة أسطر باستخدام بعض الخيارات المتقدمة مثل N و P و D.
مثال:
لنفترض أنك ترغب في دمج السطر الحالي مع السطر التالي:
bashsed 'N; s/\(.*\)\n\(.*\)/\1 \2/' file.txt
في هذا المثال، يقوم N بقراءة السطر التالي إلى السطر الحالي، ثم يقوم التعبير العادي \(.*\)\n\(.*\) بالدمج بين السطرين واستبدالهما بجملة واحدة.
3. إضافة النصوص على الأسطر المحددة
تتمثل إحدى الخصائص القوية في sed في القدرة على إضافة نصوص قبل أو بعد سطر معين. يستخدم ذلك بشكل خاص عندما تريد إدخال نصوص ثابتة أو معطيات معينة في مواضع محددة داخل الملف.
مثال:
لإضافة نص في بداية الملف:
bashsed '1i\This is the first line' file.txt
لإضافة نص بعد السطر 3:
bashsed '3a\This text is added after line 3' file.txt
4. حذف الأسطر بناءً على شروط معينة
يعد حذف الأسطر في sed أمرًا مفيدًا عندما ترغب في إزالة أسطر معينة من الملف بناءً على محتوى أو نمط معين. يمكن أيضًا تحديد أسطر بعينها باستخدام الأرقام أو النمط.
مثال:
لحذف السطر 2:
bashsed '2d' file.txt
لحذف الأسطر التي تحتوي على كلمة “error”:
bashsed '/error/d' file.txt
إذا كنت ترغب في حذف كل الأسطر من السطر 5 حتى نهاية الملف:
bashsed '5,$d' file.txt
5. استخدام sed مع الأنابيب (Pipes) لمعالجة النصوص في الوقت الفعلي
يتيح لك sed دمج عمليات التحرير مع الأنابيب (Pipes) في لينكس بحيث يمكنك تحويل وتحرير النصوص بشكل تفاعلي في الوقت الفعلي.
مثال:
افترض أنك ترغب في استخدام sed لتعديل النصوص أثناء قراءة مخرجات أمر آخر، مثل أمر ls:
bashls -l | sed 's/\.txt/\.md/'
في هذا المثال، سيتم استبدال امتداد .txt بـ .md في مخرجات أمر ls.
6. استخدام sed مع ملفات الإدخال والإخراج
في كثير من الحالات، قد ترغب في حفظ التعديلات التي تم إجراؤها على ملف باستخدام sed. لا يقوم sed بشكل افتراضي بتعديل الملفات مباشرة، بل يطبع التعديلات إلى الإخراج. ومع ذلك، يمكنك توجيه التعديلات إلى ملف جديد أو حتى تحديث الملف الأصلي باستخدام خيارات مختلفة.
مثال:
لحفظ التعديلات في ملف جديد:
bashsed 's/apple/orange/g' file.txt > new_file.txt
لتعديل الملف الأصلي مباشرة باستخدام الخيار -i:
bashsed -i 's/apple/orange/g' file.txt
7. استبدال النصوص باستخدام متغيرات
يمكنك أيضًا استخدام متغيرات في sed لاستبدال النصوص بشكل ديناميكي. هذا مفيد عندما تحتاج إلى تعديل الملفات بناءً على معطيات متغيرة.
مثال:
bashword="apple"
sed "s/$word/orange/g" file.txt
في هذا المثال، يتم استخدام متغير word ليحل محله كلمة apple في التعبير العادي.
8. استخدام sed للتعامل مع الملفات الكبيرة
أحيانًا تحتاج إلى معالجة ملفات كبيرة جدًا تحتوي على الكثير من الأسطر. يمكن لـ sed معالجة هذه الملفات بسرعة وبكفاءة عالية بفضل قدرته على العمل في ذاكرة النظام دون الحاجة إلى تحميل الملف كاملاً في الذاكرة.
مثال:
لتعديل جميع الأسطر في ملف ضخم يحتوي على أكثر من مليون سطر، يمكنك استخدام sed بفعالية دون التأثير الكبير على أداء النظام:
bashsed -i 's/old_word/new_word/g' large_file.txt
9. استخدام sed لتطبيق تعديلات متعددة في وقت واحد
عند التعامل مع عمليات تحرير معقدة، يمكن دمج أكثر من تعديل في أمر واحد باستخدام -e لتحديد أكثر من عملية.
مثال:
لتطبيق تعديلات متعددة على نفس الملف:
bashsed -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:
bashsed 's/\([0-9]*\)-\([0-9]*\)-\([0-9]*\)/\3\/\2\/\1/' file.txt
في هذا المثال، يتم استخدام التعبيرات العادية لإعادة ترتيب الأجزاء المختلفة من التاريخ.
11. استخدام sed لتحويل النصوص إلى حالة الحروف الكبيرة أو الصغيرة
يمكنك استخدام sed لتحويل النصوص من الحروف الصغيرة إلى الكبيرة أو العكس.
مثال:
لتحويل النص إلى أحرف كبيرة:
bashsed 's/.*/\U&/' file.txt
لتحويل النص إلى أحرف صغيرة:
bashsed 's/.*/\L&/' file.txt
12. التعامل مع التعابير العادية متعددة الأسطر
أحد الاستخدامات المتقدمة هو التعامل مع النصوص التي تمتد عبر عدة أسطر باستخدام sed. يمكن استخدام التعابير العادية لتحديد وتحويل النصوص الممتدة على أكثر من سطر.
مثال:
لحذف كل الأسطر الفارغة:
bashsed '/^$/d' file.txt
الخاتمة
إن أداة sed هي واحدة من الأدوات القوية والمفيدة في بيئة لينكس لمعالجة النصوص. توفر هذه الأداة قدرات قوية على التحرير المتقدم باستخدام التعبيرات العادية، مما يسمح للمستخدمين بإجراء عمليات معقدة على الملفات والنصوص. من استبدال النصوص البسيط إلى التعامل مع الملفات الكبيرة واستخدام المتغيرات والدوال المتقدمة، يعد sed أداة لا غنى عنها في ترسانة مستخدمي لينكس.

