كيفية استخدام Sed في لينكس


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

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

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

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

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

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

الأمر العام لـ sed يشبه:

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

واحدة من الوظائف الأساسية في sed هي n أمر فرعي. إنه يعمل عن طريق قراءة البيانات من مدخلات sed ووضعها في “مساحة النمط” الخاصة ببرنامجك. هذا مخزن مؤقت خاص يحتفظ بأي نص وارد قبل أن يقوم sed بأي معالجة له:

محطة تبين محتويات

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

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

محطة تعرض مخرجات الأمر الفرعي p بدون العلامة -n.

لتعطيل هذا السلوك الغريب، قم بإضافة -n ضع علامة قبل تشغيل أوامر sed الفرعية الخاصة بك:

محطة طرفية تعرض مخرجات الأمر الفرعي p مع تمكين العلامة -n.

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

1. اختيار وتشذيب تدفقات النص

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

يستخدم الأمر التالي صيغة نطاق sed لطباعة السطر الثالث إلى الخامس في ملف “hello.txt”:

محطة توضح قدرة sed على طباعة نطاقات خطوط محددة.

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

sed -n '1p; 4p' hello.txt
محطة تعرض خطوط الطباعة غير المتجاورة من ملف نصي.

2. إزالة النص من تيار Sed

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

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

sed -n '2d; 5d; p' hello.txt
محطة توضح عملية حذف الخطوط غير المتجاورة باستخدام sed.

على غرار طباعة أسطر النص، فإن d يعمل الأمر الفرعي مع نطاقات متعددة الخطوط. على سبيل المثال، سيقوم الأمر التالي بحذف الأسطر الأربعة الأولى من ملف “hello.txt”:

sed -n '1,4d; p' hello.txt
محطة توضح عملية حذف مجموعة من الخطوط باستخدام sed.

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

sed -n '/world/ d; p' hello.txt

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

sed -n '/world/,/wonderful/ d; p' hello.txt
محطة توضح قدرة sed على حذف أسطر النص بناءً على نمط regex.

3. إضافة نص جديد إلى تيارات Sed

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

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

sed -ne '$a hello' -e 'p' hello.txt
محطة توضح عملية إضافة سطر واحد من النص في نهاية دفق sed.

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

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

sed -ne '$r welcome.txt' -e 'p' hello.txt
محطة توضح عملية إلحاق ملف كامل بنهاية دفق sed.

4. البحث عن النص واستبداله في Sed

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

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

محطة طباعة محتويات

استبدل 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
محطة توضح الأمر الفرعي للاستبدال في sed.

5. نسخ البيانات النصية إلى مساحة التعليق

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

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

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

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

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

يمكنك أيضًا استخدام H أمر فرعي لتخزين عدة أسطر من النص داخل مساحة التعليق الخاصة بك. على سبيل المثال، يقوم الأمر التالي بتخزين السطر الثالث والرابع من الملف النصي الخاص بي وطباعته مرة أخرى إلى الوحدة الطرفية:

sed -ne '3,4H; $ {x; p}' hello.txt
محطة توضح عملية الاحتفاظ بعدة أسطر من النص في sed "عقد الفضاء."

6. استخدام التسميات لإنشاء حلقات في Sed

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

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

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

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

sed -e ':x; /$/ {N; s/\n/ /g; bx}' hello.txt
محطة توضح عملية تجريد أحرف السطر الجديد باستخدام تسميات sed في الحلقات.

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

sed -re ':x; s/<[^>]*>//g; {N; bx}' hello.html
محطة تعرض إزالة علامات HTML في ملف باستخدام الحلقات.

7. إجراء تغييرات دائمة في Sed

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

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

sed -ne '2p; 6p' hello.txt > hi.txt
محطة توضح قدرة sed على استخدام إعادة توجيه الإخراج لحفظ مخرجاته في الملفات.

وبصرف النظر عن إعادة توجيه الإخراج، يمكنك أيضا استخدام المدمج في -i قم بتحرير ملفك الحالي بدلاً من إخراج التغييرات في وحدة التحكم الطرفية الخاصة بك. على سبيل المثال، يقوم الأمر التالي بإزالة أي أحرف سطر جديد من الملف النصي الخاص بي وحفظه:

sed -ie ':x; $; {N; s/\n/ /g; bx}' hello.txt
محطة تعرض علامة -i في sed، والتي تسمح للبرنامج بذلك

إذا كان كل هذا الحديث قد أثار فضولك تجاه سطر أوامر Linux. يمكنك قراءة مقالتنا السابقة حيث نتحدث عن بعض مطالبات Bash الأكثر إثارة للاهتمام والتي يمكنك استخدامها اليوم.

حقوق الصورة: مورجان ريتشاردسون عبر Unsplash. جميع التعديلات ولقطات الشاشة بواسطة Ramces Red.

اشترك في النشرة الإخبارية لدينا!

يتم تسليم أحدث البرامج التعليمية لدينا مباشرة إلى صندوق البريد الوارد الخاص بك

رمسيس الأحمر

رمسيس كاتب في مجال التكنولوجيا عاش مع أجهزة الكمبيوتر طوال حياته. قارئ غزير الإنتاج وطالب في الأنثروبولوجيا، وهو شخصية غريبة الأطوار تكتب مقالات عن Linux وأي شيء لا شيء.


اكتشاف المزيد من تكتك تكنولوجيا

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى

اكتشاف المزيد من تكتك تكنولوجيا

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading