سيقوم كل مستخدم للكمبيوتر في العالم عاجلاً أم آجلاً بتعديل سلسلة نصية - إما يدويًا أو تلقائيًا. تعرف على محرر الدفق sed، والذي يمكّنك من إجراء تعديلات نصية مجمعة على السلاسل والملفات.
التعبيرات العادية في سطر الأوامر
محرر دفق sed ، أداة متوفرة بشكل افتراضي في العديد من توزيعات Linux ، تمكنك من تحليل وتحويل النص بطريقة سهلة ومباشرة ، سواء كان هذا النص داخل ملفات ، أو مجرد سلاسل بسيطة في سطر الأوامر.يمكنك أيضًا تحليل قوائم الدليل وإخراج قائمة العمليات ومعظم أنواع المعلومات الأخرى التي يمكن أن تتدفق داخل أو خارج جلسة المحطة.
للتحقق مما إذا كان sed متاحًا على توزيعة Linux الخاصة بك ، اكتب
sed --versionفي سطر الأوامر:

لا تقلق إذا كان إصدارك أقدم قليلاً من الإصدار الموضح هنا. يكاد يكون من المؤكد أنه سيكون جيدًا بالنسبة للأمثلة التي نناقشها هنا. إذا لم تكن الأداة متوفرة في التوزيع الخاص بك ، فيمكنك تثبيتها باستخدام
sudo apt install sed
لأنظمة التشغيل المستندة إلى Ubuntu / Debian ، أو
sudo yum install sedلأنظمة التشغيل المستندة إلى RedHat / RPM.
sedيطبق تحويل نصي صغير باستخدام ما يسمى RegEx ، أو التعبير العادي. التعبير العادي هو شكل وطريقة للتعبير عن عمليات بحث تستند إلى نص أكثر تعقيدًا واستبدال وتعديل العمليات بتنسيق لا يزال قابلاً للقراءة.التعبيرات العادية معقدة ، وقد تصعب قراءتها للمبتدئين. يمكنك قراءة دليلنا ، كيف تستخدم بالفعل Regex ، لمزيد من المعلومات حول كيفية قراءة وكتابة Regex.
لغرض هذه المقالة ، سنلتزم بسهولة فهم وقراءة التعبيرات العادية. على سبيل المثال ، ما يلي هو بديل بسيط:

كما ترى ، قمنا بترديد جزء صغير من النص ، ثم قمنا بتحويله باستخدام أداة sed. استخدمنا استخدام الأمر sed "s" (البديل) وأشارنا إلى ما نريد تغييره. يمكنك قراءة هذا بطريقة أخرى مثل
s | من | إلى |حيث '|' هو الفاصل بين الأقسام / الحقول ، و 's' هو الأمر و 'from' و 'to' هما الخياران اللذان تم تمريرهما لأمر 's.
قمنا بالتالي بتحويل "Hello Cloud Savvy IT معجبين!" إلى "Hello cloudsavvyit.com معجبين!" فقط من خلال تغيير جزء من النص باستخدام محرر تدفق sed. لنأخذ مثالًا أكثر تعقيدًا بعض الشيء.

هنا نقوم أولاً بإنشاء ملف بثلاثة أسطر باستخدام الأمر
echo
مع إعادة التوجيه إلى ملف (يقوم ">" بإنشاء ملف جديد ، والكتابة فوق ملف يحمل نفس الاسم إذا موجود ، ويلحق ">>" بملف دون تعديله بطريقة أخرى). بعد ذلك ، عرضنا محتويات الملف باستخدام الأمر
cat.
قمنا بعد ذلك بتحويل محتويات الملف باستخدام الأداة
sedمباشرة. للقيام بذلك ، حددنا الخيار "-i" لـ sed الذي يحرر الملف في مكانه. تعليمات التحويل النصي الفعلية هي نفسها كما كانت من قبل. وأخيرًا نحدد اسم الملف في نهاية الأمر. ثم نتحقق من محتويات الملف ونلاحظ كيف تغيرت المدخلات الخاصة بنا.
كما ترى ، أو تعلم بالفعل من التجربة السابقة ، هناك الكثير من القوة المتاحة في أداة sed.
دعونا نضيف بعض الإثارة للأشياء من خلال التوسع في تعبيرنا المعتاد وطريقة كتابة تعليمات تحويل النص sed:

في هذا المثال ، استبدلنا الحرف "h" بـ "_H" وقمنا بذلك في صيغة عامة (لاحظ المؤهل "g" بالقرب من نهاية التعليمات الأولى التي تم تمريرها إلى sed) وبطريقة غير حساسة لحالة الأحرف (لاحظ المؤهل "i" أيضًا بالقرب من نهاية التعليمات الأولى). تتم مطابقة "h" على الرغم من احتواء الملف على "H" بسبب المؤهل "i".
ثم بدأنا تعليمة جديدة (تم إنهاء / إنهاء التعليمات بـ "؛" على حد سواء في العديد من لغات البرمجة الأخرى) حيث قمنا بحذف ".com" من خلال البحث عنه بشكل أساسي واستبداله بلا شيء.
لاحظ أيضًا كيف استخدمنا فواصل خيارات المجال / الأوامر المختلفة. في المثال الأول ، استخدمنا "|" وهو فاصل مجال سهل الاستخدام بشكل عام وغير مألوف إلى حد ما. يستخدم العديد من الأشخاص "/" على الرغم من أن هذا قد يؤدي إلى حدوث مشكلات عندما تقوم بتحليل أسماء المسارات التي غالبًا ما تحتوي على "/".
تمكنك القدرة على استخدام فواصل خيارات حقل / أمر مختلفة من استخدام فاصل آخر بسهولة إذا كانت السلسلة النصية الخاصة بك تحتوي بالفعل أو من المحتمل أن تحتوي على حرف معين.
استخدام sed مع الملفات
لنستكشف مثالًا آخر يعتمد على sed حيث سنقوم بحقن نص في ملف:

في هذا المثال ، أنشأنا ملفًا مكونًا من 5 أسطر ثم استخدمنا بعد ذلك تعليمة sed المعقدة قليلاً لإدخال فاصل "-" بعد كل سطر ثاني. بينما يشرح بناء الجملة نفسه في الغالب ، من المثير للاهتمام ملاحظة أن الأمر "r" (قراءة / إلحاق نص من ملف) يحدد اسم ملف الحقن مباشرةً ، بينما لا يزال داخل التعليمة الرئيسية ، بدون أي فاصل.
يمكنك أيضًا أن تبدأ في رؤية أنه بالإضافة إلى تعلم تركيب تعبير عادي ، من المفيد تعلم بناء جملة sed بعمق. يشبه الأمر تقريبًا تعلم لغتين أجنبيتين جديدتين ، لكن الميزة هي أن بناء جملة sed يمكن أن ينمو مع حاجتك إلى تعقيد إضافي.
لنستكشف مثالاً حيث نستبدل منطقة نصية معينة بشيء آخر:

في هذا المثال ، نبحث عن النص "3" ، وبالنسبة لهذا السطر ، سنستبدل "C" بـ "Z". ترى كيف يمكن أن تكون سيد متعدد الاستخدامات.
أخيرًا ، يمكننا النظر في تحليل أنواع أخرى من المدخلات:

كما ترى ، أنشأنا 3 ملفات ، وطلبنا قائمة دليل باستخدام الأمر
ls. ثم أخذنا هذا الإخراج كمدخل إلى sed (باستخدام أمر Linux pipe ، "|") وقمنا بتحويل جزء من قائمة دليلنا إلى شرطة سفلية.
محرر دفق sed هو أداة متعددة الاستخدامات يمكن أن تساعدك على تحليل وتحويل أي نص تقريبًا مباشرة من سطر أوامر المحطة ، سواء كان الإدخال يأتي من عبارة بسيطة
echo
، أدوات Linux الأخرى ، أو من ملف نصي مسطح. استمتع!