كيفية استخدام Sed في Linux

how-to-use-sed-linux

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

أساسيات استخدام Sed

Sed هو برنامج يمكنه قراءة وتعديل تدفقات بيانات النصوص. هذا يعني أن sed لا يغير الملفات مباشرة على جهاز الكمبيوتر الخاص بك، بل يعمل كـ “مرشح” للبيانات الواردة ويسمح لك بتحويلها كما تشاء.

للبدء مع sed، أولاً قم بإنشاء ملف يحتوي على خمسة أسطر على الأقل من النصوص. تأكد من وجود “سطر جديد” بين الأسطر:

printf "hello\nmaketecheasier\nworld\nthis\nis\nwonderful\n" > hello.txt

ملاحظة: بينما يستخدم هذا الدليل ملف نصي متعدد الأسطر لعرض sed، فإن جميع الأوامر الفرعية في البرنامج ستعمل أيضًا على النصوص الواردة من أنابيب UNIX.

الأمر العام لـ sed هو:

sed [option] '{script}' [text file]

الأوامر الأساسية في Sed

  1. اختيار وتقليم تدفقات النصوص

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

التحقق من الأسطر من الثالث إلى الخامس في ملف “hello.txt”:

sed -n '3,5p' hello.txt

يمكنك أيضًا استخدام الأمر p لطباعة الأسطر غير المتجاورة في نصك. على سبيل المثال، لطباعة السطرين الأول والرابع في “hello.txt”:

sed -n '1p; 4p' hello.txt
  1. إزالة النصوص من تدفق Sed

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

لحذف الأسطر، استخدم الأمر d مع السطر أو النطاق المحدد:

sed -n '2d; 5d; p' hello.txt

لحذف أول أربعة أسطر من “hello.txt”:

sed -n '1,4d; p' hello.txt

يمكنك أيضًا استخدام التعبيرات العادية للعثور على النصوص التي تريد حذفها:

sed -n '/world/ d; p' hello.txt
  1. إضافة نصوص جديدة إلى تدفقات Sed

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

لإضافة سطر جديد من النص، استخدم الأمر a متبوعًا بالنص الذي تريد إضافته:

sed -ne '$a hello' -e 'p' hello.txt

ملاحظة: يشير الخيار -e إلى أن السلسلة المقتبسة بعده هي تعبير sed، مما يتيح لك سلسلة التعبيرات معًا دون استدعاء sed عدة مرات.

يمكنك أيضًا تضمين ملفات كاملة في تدفق نصوص sed. للقيام بذلك، استخدم الأمر r متبوعًا باسم الملف الذي تريد إضافته:

sed -ne '$r welcome.txt' -e 'p' hello.txt
  1. البحث واستبدال النصوص في Sed

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

ابدأ بطباعة نصك دون أي تعديلات من sed:

sed -ne 'p' hello.txt

استبدل الأمر p بـ s، ثم أضف ثلاث شرطات مائلة (/) بعدها:

sed -ne 's///' -e 'p' hello.txt

أدخل التعبير العادي للبحث عن النصوص التي تريد مطابقتها بين الشريطتين المائلتين الأوليتين. على سبيل المثال، يمكننا البحث عن الكلمات التي تبدأ بـ “wo”:

sed -ne 's/wo*.//' -e 'p' hello.txt

أدخل النص الذي تريد استبدال المطابقات به بين الشريطتين المائلتين الثانية والثالثة:

sed -ne 's/wo.*/website/' -e 'p' hello.txt

بشكل افتراضي، يقوم sed باستبدال أول تطابق على أي سطر معين. لإجراء استبدال كل الحالات، أضف الخيار g بعد الشريط المائل الثالث:

sed -ne 's/wo.*/website/g' -e 'p' hello.txt
  1. نسخ بيانات النصوص إلى مساحة الحفظ

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

يمكنك استخدام مساحة الحفظ لتخزين مخرجات معينة دون الاعتماد على البرامج الخارجية. هذا مفيد إذا كنت تخطط لاستخدام sed لمعالجة تعديلات نصية متعددة الخطوات.

ابدأ باستخدام مساحة الحفظ بإنشاء ملف يحتوي على بعض الأسطر من النصوص:

sed -ne 'p' hello.txt

استبدل الأمر p بـ h، ثم قدم رقم السطر أو قيمة التعبير العادي التي يطابقها sed في ملفك:

sed -ne '3h' hello.txt

ملاحظة: البيانات داخل مساحة الحفظ لا تستمر عبر أوامر sed المختلفة.

يمكنك أيضًا استخدام الأمر H لتخزين عدة أسطر من النصوص داخل مساحة الحفظ:

sed -ne '3,4H; $ {x; p}' hello.txt
  1. استخدام العلامات لإنشاء حلقات في Sed

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

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

sed -e ':x' hello.txt

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

sed -e ':x; $' hello.txt

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

sed -e ':x; /$/ {N; s/\n/ /g; bx}' hello.txt

يمكنك أيضًا استخدام ميزة التعبيرات العادية الموسعة لـ sed لإزالة علامات HTML من نصوصك:

sed -re ':x; s/<[^>]*>//g; {N; bx}' hello.html
  1. إجراء تغييرات دائمة في Sed

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

الأسطر التالية من الكود تنشئ ملف “welcome.txt” جديدًا من مخرجات أمر sed:

sed -ne '2p; 6p' hello.txt > hi.txt

يمكنك أيضًا استخدام الخيار المدمج -i لتحرير ملفك الحالي بدلاً من عرض تغييراتك في وحدة التحكم:

sed -ie ':x; $; {N; s/\n/ /g; bx}' hello.txt

ملاحظة: يسمح الخيار -i لبرنامج sed بـ “التحرير في المكان” بدلاً من تحويل التدفق فقط.