دليل استخدام محرر النصوص Sed: الأداة القوية لتحرير النصوص في أنظمة يونكس ولينكس
يُعتبر محرر النصوص sed (اختصار لـ Stream Editor) من الأدوات الأساسية التي لا غنى عنها في أنظمة التشغيل يونكس ولينكس. يُستخدم sed لتحرير النصوص بشكل غير تفاعلي، مما يعني أنه يمكن معالجة البيانات النصية بشكل مؤتمت ودون الحاجة إلى تدخل يدوي في كل خطوة. يُعدّ هذا المحرر أداة قوية جداً في التعامل مع النصوص الكبيرة والمعقدة، ويتميّز بالسرعة والكفاءة في إتمام العمليات النصية.
ما هو محرر النصوص Sed؟
sed هو محرر نصوص يعتمد على تحويل النصوص وفقاً للأنماط المحددة، وهو يعمل على قراءة النصوص من تدفق البيانات (stream) أو من ملف نصي، ثم تعديل هذه النصوص بناءً على أوامر معينة يتم تحديدها في سطر الأوامر. يمكن استخدام sed لاستبدال النصوص، حذف الأسطر، إضافة نصوص، وأكثر من ذلك.
تركيب واستخدام الأمر sed
يتبع الأمر sed الشكل الأساسي التالي:
bashsed [خيارات] [تعبير نمطي] [ملف النصوص]
يبدأ الأمر دائمًا بكلمة sed تليها الخيارات والتعبيرات النمطية التي تحدد كيفية معالجة النصوص في الملف أو المدخلات.
الخيارات الأساسية في Sed
-
-e: يتيح لك تنفيذ عدة تعبيرات نمطية في أمر واحد. مثلاً:
bashsed -e 's/old/new/' file.txt -e 's/foo/bar/' -
-i: يستخدم هذا الخيار لتحرير النصوص في الملف نفسه (أي تحرير نصوص مضمّنة مباشرة داخل الملف). مثال:
bashsed -i 's/old/new/' file.txt -
-n: يمنع
sedمن طباعة النصوص المعدلة تلقائيًا. يُستخدم مع أوامر مثلpلطباعة الأسطر المطلوبة فقط. مثلاً:bashsed -n 's/foo/bar/p' file.txt -
-f: يمكن من تنفيذ أوامر
sedمن ملف خارجي يحتوي على التعبيرات النمطية.
العمليات الأساسية في Sed
1. استبدال النصوص
واحدة من أكثر العمليات شيوعاً التي يتم تنفيذها باستخدام sed هي استبدال نصوص معينة داخل ملف. يتم تنفيذ هذه العملية باستخدام الأمر s/النمط/الاستبدال/، حيث يتم تحديد النمط الذي سيتم البحث عنه في النص، والنص الذي سيتم استبداله به.
مثال:
bashsed 's/old/new/' file.txt
في هذا المثال، سيتم استبدال أول ظهور للكلمة “old” بالكلمة “new” في كل سطر من الملف file.txt.
إذا أردت استبدال جميع ظهورات “old” في الملف:
bashsed 's/old/new/g' file.txt
2. حذف الأسطر
يمكن استخدام sed لحذف الأسطر التي تحتوي على أنماط معينة. على سبيل المثال، لحذف السطر الذي يحتوي على كلمة “error”:
bashsed '/error/d' file.txt
العلامة d تعني الحذف. يمكن أيضًا حذف الأسطر بناءً على أرقام معينة:
bashsed '2d' file.txt
هذا الأمر يقوم بحذف السطر الثاني في الملف.
3. إضافة نصوص إلى الأسطر
يُستخدم الأمر a لإضافة نص بعد السطر الحالي. على سبيل المثال، لإضافة النص “Hello World” بعد السطر الثالث:
bashsed '3a Hello World' file.txt
كما يمكن إضافة النص قبل السطر باستخدام الأمر i:
bashsed '2i This is a new line' file.txt
4. استبدال نصوص في أسطر محددة
إذا أردت أن تقوم بتعديل نصوص داخل أسطر معينة فقط، يمكنك استخدام الأرقام أو النطاقات لتحديد الأسطر المستهدفة. على سبيل المثال:
bashsed '1,3s/old/new/' file.txt
سيتم استبدال “old” بـ “new” فقط في الأسطر 1 إلى 3 من الملف.
5. استخدام التعبيرات النمطية (Regular Expressions)
تسمح لك sed باستخدام التعبيرات النمطية (regex) لتحديد الأنماط بشكل أكثر تعقيدًا. على سبيل المثال، إذا كنت تريد استبدال أي نص يبدأ بحرف “a” وينتهي بحرف “z”، يمكنك استخدام:
bashsed 's/a.*z/xyz/' file.txt
استخدام Sed في سكربتات شل (Shell Scripts)
واحدة من أقوى استخدامات sed هي في سكربتات الشل، حيث يمكن دمج sed مع أوامر أخرى لإنشاء حلول معالجة نصوص متقدمة. على سبيل المثال، يمكن استخدام sed مع find لتعديل محتوى الملفات في مجلدات متعددة.
مثال:
bashfind . -name "*.txt" -exec sed -i 's/old/new/g' {} \;
هذا الأمر سيبحث عن جميع الملفات التي تحمل الامتداد .txt في المجلد الحالي وكل المجلدات الفرعية، ثم يقوم باستبدال الكلمة “old” بـ “new” في هذه الملفات.
استخدام Sed في التعامل مع البيانات النصية
واحدة من الخصائص المفيدة لـ sed هي قدرته على التعامل مع البيانات النصية القادمة من مصادر متعددة مثل الملفات، المخرجات من الأوامر الأخرى أو حتى من إدخال المستخدم في سطر الأوامر. على سبيل المثال، يمكنك توجيه مخرجات أمر آخر إلى sed لتحرير النصوص بشكل مباشر.
مثال:
bashecho "The quick brown fox" | sed 's/fox/dog/'
في هذا المثال، سيتم استبدال كلمة “fox” بـ “dog” في النص المدخل بواسطة echo.
التلاعب بالتواريخ والأوقات باستخدام Sed
تُستخدم sed في بعض الأحيان لمعالجة التواريخ والأوقات في النصوص. على سبيل المثال، يمكنك استخدام sed لتنسيق التاريخ بالشكل الذي تريده.
مثال:
bashecho "2025-05-05" | sed 's/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)/\3-\2-\1/'
سيتم تحويل تاريخ “2025-05-05” إلى “05-05-2025”.
تطبيقات متقدمة لـ Sed
1. الدمج بين Sed و Awk
قد يُعتبر استخدام sed و awk معًا من أفضل الطرق للتعامل مع نصوص معقدة. يمكن لـ sed أن يعدل النصوص بناءً على أنماط بسيطة، بينما يُستخدم awk لتحليل البيانات النصية في جداول أو بنية بيانات أكثر تعقيدًا.
مثال:
bashawk '{ print $1 }' file.txt | sed 's/foo/bar/'
في هذا المثال، يقوم الأمر awk بعرض أول عمود من file.txt ثم يتم تمرير هذا المخرج إلى sed لاستبدال “foo” بـ “bar”.
2. تحويل النصوص الكبيرة
عند التعامل مع ملفات نصية كبيرة، يمكن أن يكون استخدام sed حلاً مناسباً لتحسين أداء النظام، حيث يعمل sed على تدفق البيانات بشكل فعال دون تحميل كامل المحتوى في الذاكرة.
الاستفادة من Sed في إدارة الأنظمة
يعد sed أداة مثالية للمسؤولين عن الأنظمة لأتمتة مهام مثل تعديل ملفات التكوين، وتحليل سجلات النظام، وتجميع التقارير. استخدام sed يساهم في تحسين الكفاءة وتقليل الوقت المستهلك في إجراء هذه العمليات يدويًا.
على سبيل المثال، لتعديل ملفات التكوين في النظام مثل /etc/hosts أو /etc/passwd، يمكن استخدام sed لتنفيذ التعديلات المطلوبة بأمان ودون التأثير على العمليات الأخرى في النظام.
الخاتمة
يُعتبر sed أداة لا غنى عنها في عالم أنظمة التشغيل لينكس ويونكس بفضل قدرته الكبيرة على التعامل مع النصوص وتحويلها بشكل فعال وسريع. من العمليات البسيطة مثل الاستبدال والحذف، إلى الاستخدامات المتقدمة مثل دمج sed مع أدوات أخرى، تتيح هذه الأداة للمستخدمين التلاعب بالنصوص بكفاءة عالية. بالنسبة للمستخدمين الذين يتعاملون مع كميات ضخمة من البيانات أو أولئك الذين يرغبون في أتمتة مهامهم، فإن اتقان استخدام sed يعد استثمارًا يستحق الوقت والجهد.

