الدليل الشامل لأمر sed في لينكس

نظرة عامة

نقدم لكم شرحاً شاملاً لأمر sed القوي، وهو محرر تدفق (Stream Editor) يُستخدم لاستبدال محتويات الملفات النصية وتحريرها بدقة وسرعة في بيئة لينكس. ستتعلم بسهولة من خلال أمثلة عملية كيفية استبدال النصوص الأساسية، وحذف أسطر معينة، واستخدام خيار التعديل المباشر في الملف (-i) بالتزامن مع إنشاء نسخ احتياطية.

1. إعداد بيئة التدريب واستبدال النصوص الأساسي بأمر sed (الأمر s)

لتجهيز دليل مخصص لإجراء تدريبات أمر sed بأمان والانتقال إليه، نقوم بتنفيذ الأمر mkdir -p ~/sed_practice && cd ~/sed_practice.

mkdir -p ~/sed_practice && cd ~/sed_practice

لإنشاء نص تجريبي لاستخدامه في تطبيق استبدال النصوص، نقوم بتنفيذ الأمر echo -e 'apple is delicious\nbanana is yellow\napple is red' > fruits.txt لكتابة المحتوى في الملف.

echo -e ‘apple is delicious\nbanana is yellow\napple is red’ > fruits.txt

يُعد أمر sed محرر تدفق لمعالجة وتعديل تدفقات النصوص.
باستخدام معامل الاستبدال s، يتم استبدال أول ظهور للكلمة apple في كل سطر بالكلمة orange وعرض النتيجة على الشاشة.
لا يتغير محتوى الملف الأصلي fruits.txt، بل تُعرض النتيجة فقط على المخرج القياسي (Standard Output).
⚙️ [الخيارات الرئيسية]

-i : تعديل الملف الأصلي وحفظه مباشرة بدلاً من عرض النتيجة على الشاشة فقط.
-e : ربط وتنفيذ أوامر برمجية تحريرية متعددة في وقت واحد.
-n : كتم الإخراج التلقائي لمساحة النمط (Pattern Space) وعرض الأسطر المحددة صراحة فقط.
-E أو -r : تفعيل واستخدام صيغة التعبيرات النمطية الموسعة (ERE).

sed ’s/apple/orange/’ fruits.txt

عند إضافة الراية g في نهاية تعبير الاستبدال، سيتم استبدال جميع التطابقات في السطر الواحد بشكل شامل (global).
يُستخدم هذا الخيار عندما تتكرر الكلمة المفتاحية في السطر الواحد عدة مرات وترغب في تعديلها جميعاً دون أي استثناء.

sed ’s/apple/orange/g’ fruits.txt

2. عرض أسطر محددة وحذف الأسطر (الخيار d و -n)

لتجهيز بيانات سجلات لتطبيق تحديد الأسطر وحذفها، نقوم بتنفيذ الأمر echo -e 'Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK' > server.log لإنشاء ملف تجريبي.

echo -e ‘Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK’ > server.log

من خلال الدمج بين الخيار -n والأمر p، يتم عرض النطاق المحدد فقط من السطر 2 إلى السطر 3 على الشاشة.
هذا الخيار مفيد لكتم الإخراج التلقائي وفحص أسطر معينة ترغب في رؤيتها فقط.

sed -n ‘2,3p’ server.log

باستخدام الأمر d ومطابقة النمط، يتم استبعاد الأسطر التي تحتوي على النص Warning وعرض بقية المحتوى فقط على الشاشة.
يُستخدم ذلك لتصفية ومراجعة السجلات غير المرغوب فيها أو الأسطر التي تطابق شروطاً معينة.

sed ‘/Warning/d’ server.log

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

sed ‘2d’ server.log

3. التعديل المباشر على الملف الأصلي مع إنشاء نسخة احتياطية تلقائية (الخيار -i)

للتدريب على تعديل ملفات الإعدادات، نقوم بإنشاء ملف config.env يحتوي على بيانات متغيرات بيئية تجريبية.

echo -e ‘PORT=8080\nDEBUG=true\nTIMEOUT=30’ > config.env

باستخدام الخيار -i.bak، يتم إنشاء نسخة احتياطية من الملف الأصلي باسم config.env.bak، وفي الوقت نفسه يتم استبدال الإعداد DEBUG=true بـ DEBUG=false وحفظه مباشرة في الملف الأصلي.
يُستخدم هذا الأسلوب لتعديل الملف الأصلي مباشرة مع الاحتفاظ بالحالة السابقة بأمان.

sed -i.bak ’s/DEBUG=true/DEBUG=false/’ config.env

نتحقق من محتوى ملف config.env المعدل باستخدام الأمر cat.
يمكن التأكد من تغيير قيمة DEBUG إلى false بنجاح وانعكاس ذلك على الملف.

cat config.env

نقوم بعرض محتوى ملف النسخة الاحتياطية الذي تم إنشاؤه تلقائياً config.env.bak للتحقق منه.
نلاحظ أنه تم الاحتفاظ بالحالة الأصلية قبل التعديل وهي DEBUG=true كما هي، مما يوضح أنه تم نسخها احتياطياً بأمان.

cat config.env.bak

4. استبدال النصوص المتقدم باستخدام التعبيرات النمطية وتغيير الفاصل

لإنشاء بيانات تجريبية لمسارات الملفات لاستخدامها في تطبيق استبدال المسارات، نقوم بكتابة المحتوى في ملف paths.txt باستخدام الأمر echo.

echo -e ‘Old path: /usr/local/bin\nNew path: /usr/local/bin’ > paths.txt

باستخدام رمز الخط العمودي (|) كفاصل للاستبدال بدلاً من الشرطة المائلة الافتراضية (/)، يتم استبدال /usr/local/bin بـ /usr/bin داخل المسار بأمان وعرض النتيجة.
عند التعامل مع مسارات الملفات أو عناوين URL التي تحتوي على شرطات مائلة، يتيح لك هذا كتابة التعبير بشكل منظم ونظيف دون الحاجة إلى رموز الهروب (\).

sed ’s|/usr/local/bin|/usr/bin|g’ paths.txt

للتدريب على إزالة المسافات الفارغة باستخدام التعبيرات النمطية، نقوم بإنشاء ملف تجريبي spaces.txt يحتوي على مسافات في البداية والنهاية.

echo -e ’   leading spaces\nno spaces\n   trailing removed   ’ > spaces.txt

من خلال مطابقة الرمز ^ الذي يشير إلى بداية السطر مع التعبير النمطي [ \t]* الذي يحدد المسافات العادية ومسافات tab، تتم إزالة كافة المسافات الموجودة في بداية كل سطر وعرض النتيجة.
تعد هذه الطريقة مفيدة للغاية عند الرغبة في تنظيم مسافات البادئة (Indentation) في المستندات أو بيانات السجلات دفعة واحدة.

sed ’s/^[ \t]*//’ spaces.txt

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