قم بتعزيز مهارات سطر الأوامر الخاصة بك باستخدام هذه الأمثلة على sed

هل كنت تبحث عن وسيلة أخرى لأداء عمليات التحرير على النصوص؟ لا داعي للبحث أكثر! توفر لك هذه الدورة التعليمية أمثلة على محرر التدفق (sed) مع التفاصيل.

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

استمر في القراءة وقم بتعزيز مهارات سطر الأوامر الخاصة بك!

المتطلبات

تأكد من أن لديك ما يلي لمتابعة الدورة التعليمية العملية في هذا البرنامج:

  • A command line interface (e.g., Terminal on macOS or Linux) – This tutorial uses Ubuntu Linux 20.04, but the commands should work on most popular operating systems.
  • A text editor (e.g., nano, vi, or Sublime Text) – This tutorial uses Nano.

تثبيت محرر التدفق (sed) على أوبونتو

عادةً ما يتم تضمين sed كأداة قياسية في معظم أنظمة التشغيل شبيهة Unix، بما في ذلك Linux و macOS. ولكن بصرف النظر عن ذلك، يمكن التحقق مرتين مما إذا كان sed مثبتًا بالفعل على نظامك وهو إجراء أساسي قبل إجراء تحويلات النص.

1. افتح الطرفية الخاصة بك وقم بتشغيل الأمر sed أدناه للتحقق من الإصدار الذي تم تثبيته على نظامك.

sed --version

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

Verifying sed’s installed version

وإلا، سترى رسالة الخطأ أدناه إذا لم يتم تثبيت الـ sed.

تشير هذه الرسالة إلى أن الأمر sed لم يتم العثور عليه في متغير البيئة PATH الخاص بنظامك.

Getting an error running sed commands

2. بعد ذلك، قم بتشغيل الأمر التالي [apt-get update لتحديث وتثبيت sed على نظامك.

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

sudo apt-get update -y && sudo apt-get install sed -y
Installing sed on the operating system

3. أخيرًا، قم بتشغيل الأمر التالي للتحقق من تثبيت الأمر sed على نظامك.

يقوم هذا الأمر بطباعة المسار الكامل لملف التنفيذ الخاص بـ sed، والذي في هذا المثال هو /usr/bin/sed.

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

which sed
Verifying that the sed command is installed

استبدال السلاسل في ملف نصي

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

فيما يلي بعض السيناريوهات، ولكن ليس محدودة بها، حيث يكون استبدال السلاسل مفيدًا:

  • تحديث قائمة من روابط URL لتعكس اسم نطاق جديد.
  • تغيير معرّفات المنتج في قاعدة بيانات أو ملف CSV.
  • تنسيق البيانات للاستيراد إلى نظام آخر والمزيد من الوظائف.

الصيغة الأساسية لاستخدام sed هي كما يلي:

Placeholder Function
command Controls sed’s behavior.
options Allows you to customize the behavior of the sed command
input_file Specifies the file or text stream that you want to edit. Typically, you can specify a single file or stream, but concatenating multiple files or streams by redirection also works.
output_file Specifies the file that contains the results of your sed command. The file can be new or the same as input_file, depending on how you use sed.
sed command options input_file | output_file

لنفترض أن لديك ملف نصي يُسمى urls.txt يحتوي على قائمة من عناوين URL وتريد تحديث كل العناوين لاستخدام اسم نطاق جديد.

1. قم بتشغيل أوامر echo أدناه لإنشاء ملف urls.txt في الدليل الحالي. هذه الأوامر لا تقدم أي إخراج ولكن تكتب النصوص المحددة إلى الملف.

echo "http://old-domain.com/page1" > urls.txt && echo "http://old-domain.com/page2" >> urls.txt && echo "http://old-domain.com/page3" >> urls.txt

2. بعد ذلك، قم بتشغيل الأمر cat لعرض محتويات الملف urls.txt. cat urls.txt

cat urls.txt

الإخراج أدناه يؤكد الروابط الثلاث القديمة المكتوبة في الملف urls.txt.

Viewing the contents of the urls.txt file

3. الآن، قم بتشغيل الأمر أدناه للعثور على واستبدال (s) جميع حالات سلسلة old-domain.com بـ new-domain.com في ملف urls.txt.

sed 's/old-domain.com/new-domain.com/' urls.txt

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

Replacing a string in a text file

استبدال الظهور الثانية لسلسلة

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

على سبيل المثال، ترغب في تحديث الحقل الثاني في ملف CSV بقيمة جديدة أو تحديث الظهور الثالث لسلسلة في نسخة قاعدة بيانات.

يكون الصيغة الأساسية لهذا الأمر كما يلي حيث:

  • النمط – هو السلسلة التي سيتم استبدالها.
  • البديل – هو السلسلة التي سيتم استخدامها كبديل.
  • n – is the nth occurrence of the string to replace (e.g., 1=first occurrence, 2=second occurrence…).
sed 's/pattern/replacement/n' input_file

لرؤية كيفية استبدال الحدوث الثاني لسلسلة، اتبع هذه الخطوات:

قم بتشغيل الأمر التالي echo لإنشاء سطر نصي يحتوي على ثلاث حدوثات من النمط سريع. ثم يقوم الأمر sed بتبديل (s) الحدوث الثاني (2) من النمط سريع بالسلسلة سريع.

echo "The quick and quick and quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2'

كما يمكنك رؤية أدناه، تم استبدال الحدوث الثاني فقط من النمط سريع بالسلسلة سريع، بينما تبقى جميع الحدوثات الأخرى دون تغيير.

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

Replacing the nth occurrence of a string

? لاحظ أن أمر nth يحسب حدوثات النمط من اليسار إلى اليمين. علاوة على ذلك، يعمل أمر nth فقط على سطر نص واحد. لأداء استبدال على عدة أسطر، استخدم طريقة مختلفة موضحة في القسم التالي.

ثم، قم بتشغيل الأمر التالي لاستبدال الحدوث الثاني (2) لنمط سريع بـ سريع وبتجاهل (i) حالة الأحرف.

الخيار i يكون مفيدًا عند العمل مع نصوص ذات تهجئة غير متسقة.

echo "The Quick and QuiCk and Quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2i'

في الناتج أدناه، تم استبدال الظهور الثاني لكلمة “quick” بنجاح بالسلسلة “fast” – بغض النظر عن حالة الحروف.

Replacing the nth occurrence of a string while ignoring the letter case

استبدال جميع الظهور المطابقة لنمط/سلسلة

بدلاً من استبدال الظهور الثاني لسلسلة، ربما كنت تخطط لاستبدال جميع ظهورها. يساعد القيام بذلك بشكل كبير في خطتك لتحديث النصوص القانونية بالسنة الحالية، على سبيل المثال.

1. أنشئ ملفًا يسمى input.txt بمحتويات التالية في محرر النصوص المفضل لديك.

This is a quick test.
The quick brown fox jumps over the lazy dog.
Quick, you need to finish this task before it gets too late.

2. بعد ذلك، قم بتشغيل الأمر التالي لاستبدال (s) جميع ظهور كلمة quick بـ fast من ملف input.txt. بمجرد الاستبدال، يتم كتابة التغييرات إلى ملف output.txt.

sed 's/quick/fast/g' input.txt > output.txt

3. الآن، قم بتشغيل الأمر أدناه لعرض محتويات ملف output.txt والتحقق مما إذا كانت التبديل قد تم.

cat output.txt

سترى أن جميع ظهور كلمة quick قد تم استبدالها بـ fast، كما هو موضح أدناه. على غرار الأمر nth، الأمر g حساس لحالة الحروف ويستبدل فقط التطابقات الدقيقة.

لن يتم استبدال السلسلة Quick، كما هو موضح أدناه، ولكن يمكنك استخدام الخيار i للقيام بعمليات الاستبدال التي لا تحسب حالة الحروف.

Replacing All the Occurrences of a Matching Pattern/String

استبدال نمط/سلسلة مطابقة على سطر محدد

ربما تعرف بالفعل أي خط من السلسلة تريد استبداله. لماذا تستبدل جميع الحالات إذا يمكنك استبدال السلاسل في خطوط محددة؟ هذه الميزة مفيدة عند إجراء تغييرات على خط معين في ملف أو تيار ولكن ترك الخطوط الأخرى دون تغيير.

فيما يلي الصيغة لاستبدال سلسلة من خط محدد، حيث يمثل n رقم الخط.

sed 'n s/pattern/replacement/' input_file output_file

1. أنشئ ملفًا باسم myfile.txt بالمحتوى التالي.

test1
test2
test3

2. بعد ذلك، قم بتشغيل الأمر التالي sed للقيام بما يلي:

  • ابحث عن كلمة test2 من السطر الثاني (2) من ملف myfile.txt. استبدل (s) الكلمة test2 بـ test2_changed. اكتب التغييرات (>) إلى ملف جديد يسمى myfile_changed.txt.

This command does not provide output to the terminal since the changes are written to a new file. But you will verify the changes in the following step.

sed '2 s/test2/test2_changed/' myfile.txt > myfile_changed.txt

3. في النهاية، قم بتشغيل الأمر cat التالي لعرض محتويات ملف myfile_changed.txt.

cat myfile_changed.txt

كما ترون أدناه، تم استبدال السطر الثاني من ملف myfile.txt بـ test2_changed، بينما تبقى جميع السطور الأخرى دون تغيير.

Verifying the changed string on a specific line

طباعة الخطوط المغيرة من السلاسل حصريًا

بدلاً من طباعة محتوى كامل لملف بعد إجراء التغييرات، قد ترغب في طباعة الخطوط المتغيرة فقط. كيف؟ باستخدام العلامة p مع الخيار -n.

فيما يلي الصيغة لطباعة الخطوط المتغيرة من السلاسل حصريًا حيث:

  • الخيار -n يخبر sed بكتم السلوك الافتراضي لطباعة كل سطر.
  • العلامة p تخبر sed بطباعة الناتج للأمر.
sed -n 's/pattern/replacement/p' input_file output_file

افتح ملفك myfile.txt واستبدل المحتوى بالتالي. لاحظ أن السطر الثاني غير صحيح لأن كلمة first يجب أن تكون بدلاً منها second.

This is the first line of my file.
This is the first line of my file.
This is the third line of my file.

الآن، قم بتشغيل الأمر sed التالي لاستبدال النص first بـ second في السطر الثاني (2) من الملف myfile.txt ولكن اطبع فقط الأسطر المعدلة (p).

sed -n '2 s/first/second/p' myfile.txt

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

Outputting changed lines exclusively

الاستنتاج

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

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

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

Source:
https://adamtheautomator.com/sed-examples/