يرمز أمر Linux 'sed' إلى محرر الدفق. يتم استخدامه لتحرير التدفقات (الملفات) باستخدام التعبيرات العادية. لكن هذا التحرير ليس دائمًا. يظل معروضًا فقط، ولكن في الواقع، يظل محتوى الملف كما هو.
في المقام الأول، يتم استخدامه لاستبدال النص؛ بالإضافة إلى ذلك، يمكن استخدامه لعمليات معالجة النص الأخرى مثل الإدراج والحذف والبحث والمزيد. يسمح لنا الأمر sed بتحرير الملفات دون فتحها. دعم التعبير العادي يجعله أداة أكثر قوة لمعالجة النص.
نظرة عامة على الأمر sed
إنها أداة مساعدة تعمل بنظام Unix تقوم بتحويل النص وتحليله باستخدام لغة برمجة مدمجة وبسيطة. تم دمجه من عام 1973 إلى عام 1974 بواسطة Lee E. McMahon من Bell Labs وهو موجود اليوم في كل أنظمة التشغيل تقريبًا. يعتمد الأمر sed على جوانب البرمجة النصية للمحرر السابق qed (المحرر السريع) والمحرر التفاعلي ed. لقد كانت أول أداة لدعم التعبيرات العادية، ولا تزال نشطة لمعالجة النصوص، والأهم من ذلك مع أمر الاستبدال. تشمل الأدوات البديلة الشهيرة Perl وAWK لـ 'تحرير الدفق' ومعالجة سلسلة النص العادي.
وضع التشغيل لأمر sed
الأمر sed هو أداة مساعدة موجهة لمعالجة النصوص: فهو يقرأ النص سطرًا تلو الآخر من ملف أو دفق إدخال إلى مخزن مؤقت داخلي يُعرف باسم مساحة النمط. تبدأ كل قراءات الأسطر دورة. يستخدم الأمر sed عملية واحدة أو عدة عمليات تم وصفها بواسطة برنامج نصي sed في مساحة النمط. تعمل لغة برمجة باستخدام حوالي 25 أمرًا تصف العمليات على النص.
بالنسبة لجميع أسطر الإدخال، عادةً ما ينتج عن الأمر sed مساحة النمط ويبدأ الدورة بالسطر التالي مرة أخرى بعد تنفيذ البرنامج النصي. تتوفر طبيعة أخرى لنهاية البرنامج النصي من خلال أوامر البرنامج النصي وخيارات التعيين، على سبيل المثال، N لتضمين السطر التالي على الفور في مساحة النمط، وq للخروج، وd لإزالة مساحة النمط، وما إلى ذلك. وبالتالي، يرتبط البرنامج النصي sed بجسم الحلقة الذي يتكرر من خط تبسيط، حيث يتم الحفاظ على متغير الحلقة والحلقة نفسها وضمنيًا بواسطة sed.
توسيط الصور في CSS
- يمكن وصف البرنامج النصي sed في سطر الأوامر أو قراءته من خلال ملف معزول. في البرنامج النصي sed، قد تأخذ الأوامر عنوانًا إضافيًا في سياق التعبيرات العادية أو أرقام الأسطر. يقرر العنوان متى يتم تنفيذ الأمر. على سبيل المثال، 2d سينفذ فقط الأمر d (أو الحذف) على سطر الإدخال الثاني، بينما /^ /d سيزيل كل سطر يبدأ بمسافة.
- يمكن استخدام مساحة التعليق، وهي مخزن مؤقت خاص معزول، بواسطة بعض أوامر sed للاحتفاظ بنص متراكم بين الدورات. تحتوي لغة الأوامر في sed على متغيرين فقط (مساحة النمط ومساحة التعليق) ووظيفة التفرع الشبيهة بـ GOTO. ومع ذلك، فإن اللغة تورينج كاملة. تتوفر نصوص sed الباطنية للعديد من الألعاب مثل تتريس، والشطرنج، وأركانويد، وسوكوبان.
- يتم تشغيل الحلقة الرئيسية لجميع أسطر دفق الإدخال، والتحقق من البرنامج النصي sed على كافة أسطر الإدخال. سطور البرنامج النصي sed كلها عبارة عن زوج من الأنماط والإجراء، يمثل النمط الذي سيتم مطابقته والإجراء الذي سيتم تنفيذه، والذي يمكن نسخه كبيان شرطي. تعتبر الإجراءات الافتراضية (مساحة نمط الطباعة، ونسخ السطر إلى مساحة النمط)، وتدفقات الإدخال والإخراج، ومتغيرات العمل (مساحة الاحتفاظ ومساحة النمط) ضمنية؛ من الممكن تحديد برامج مقتضبة ذات سطر واحد بسبب الحلقة الرئيسية.
استخدام الأمر sed
- علامة الإقحام (^) هي نفس بداية السطر.
- رمز الدولار ($) هو نفس رمز إكمال السطر.
- العلامة النجمية (*) هي نفس تكرار الحرف السابق أكثر أو صفر.
- رمز الزائد (+) هو نفس تكرار الحرف السابق أو عدة مرات.
- علامة الاستفهام (؟) هي نفس تكرار الحرف السابق أكثر أو صفر.
- رمز النقطة (.) هو تمامًا نفس حرف واحد.
يمثل المثال أدناه الأمر الأكثر شيوعًا والاستخدام النموذجي للأمر sed، أي الاستبدال. كان الاستخدام هو الدافع الفعلي للأمر sed :
sed 's/regexp/replacement/g' inputFileName >outputFileName
هناك طرق أخرى ممكنة أيضًا للمعالجة البسيطة باستخدام حوالي 25 أمرًا sed. على سبيل المثال، يستخدم أدناه الخيار d لتصفية الأسطر التي تتضمن مسافات ونهاية حرف السطر فقط:
sed '/^ *$/d' inputFileName
يستخدم المثال أعلاه عددًا قليلاً من الأحرف الأولية للتعبير العادي أدناه:
في كثير من الأحيان، يتم استخدام الأمر sed كفلتر داخل خط الأنابيب ضمن Unix:
$ توليد البيانات | السيد 's/x/y/g'
يقوم برنامج generatorData بإنشاء البيانات، ويقوم الأمر sed بإجراء تغيير بسيط عن طريق استبدال x بدلاً من y.
في كثير من الأحيان، من المفيد وضع العديد من أوامر sed، أمر واحد لكل سطر، داخل ملف نصي واستخدام العلامة -f لتنفيذ الأوامر من الملف:
sed -f subst.sed inputFileName >outputFileName
بناء الجملة:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
خيارات:
فيما يلي بعض خيارات سطر الأوامر للأمر sed:
-ن، --هادئ، --صامت: إنه يسمح لنا بقوة بطباعة مساحة النمط.
-e النصي، --expression=script: يتم استخدامه لإضافة البرنامج النصي إلى الأوامر المراد تنفيذها.
-f ملف البرنامج النصي، --file=ملف البرنامج النصي: يتم استخدامه لإضافة محتويات ملف البرنامج النصي إلى الأوامر المراد تنفيذها.
--تابع الروابط الرمزية: يتم استخدامه لمتابعة الروابط الرمزية عند المعالجة في مكانها.
-i[SUFFIX], --in-place[=SUFFIX]: يتم استخدامه لتحرير الملفات في مكانها (إنشاء نسخة احتياطية إذا تم توفير خيار SUFFIX).
-l N، --line-length=N: يتم استخدامه لتحديد طول التفاف السطر المطلوب للأمر `l'.
--posix: يتم استخدامه لتعطيل كافة ملحقات جنو.
-E، -r، --regexp-الموسع: يسمح لنا باستخدام التعبيرات العادية الموسعة في البرنامج النصي (لقابلية النقل، استخدم POSIX -E).
-s، --منفصلة: يتم استخدامه لاعتبار الملفات منفصلة وليست ملفًا واحدًا ويستمر في التدفق الطويل.
--رمل: يتم استخدامه للعمل في وضع الحماية.
-u، --unbuffered: يتم استخدامه لتحميل الحد الأدنى من البيانات من ملفات الإدخال ومسح المخازن المؤقتة للإخراج في كثير من الأحيان.
-z، --null-data: يتم استخدامه لفصل الأسطر بأحرف NUL.
--يساعد: يتم استخدامه لعرض دليل المساعدة.
--إصدار: يتم استخدامه لعرض معلومات الإصدار.
أمثلة على الأمر sed
دعونا نرى الأمثلة التالية:
- التقديم على دليل STDIN
- الاستبدال العالمي
- إزالة الخط
- استخدام الأمر sed المتعدد
- قراءة الأوامر من ملف
- استبدال الشخصيات
- الحد من السيد
- إدراج وإلحاق النص
- تعديل الخطوط
- تحويل الشخصيات
- طباعة أرقام الأسطر
التقديم على دليل STDIN
لا يقتصر الأمر sed على معالجة الملفات فقط؛ يمكننا أيضًا تطبيقه على دليل STDIN.
echo class7 | sed 's/class/jtp/' echo class7 | sed 's/7/10/' cat msg.txt | sed 's/learn/study/'
ستقوم الأوامر المذكورة أعلاه باستبدال النص الأول بنمط النص الثاني. النظر في الإخراج أدناه:
من الناتج أعلاه، قمنا أولاً بتنفيذ الأمر 'sed' على سلسلة 'class7' حيث تم تغيير 'class' إلى 'jtp' و7 إلى 10. ثم قمنا بتنفيذ الأمر 'sed' على دفق 'msg.txt' حيث يتم تحويل كلمة 'تعلم' إلى 'دراسة'.
الاستبدال العالمي
في المثال السابق، لم يتم تحرير جميع الكلمات 'تعلم' في كلمة 'دراسة'. لتعديل كل كلمة، علينا استخدام الاستبدال العام 'g'. سيقوم بتحرير جميع الكلمات المحددة في ملف أو سلسلة.
سلسلة جافا إلى شار
بناء الجملة:
command | sed 's///g'
خذ بعين الاعتبار الأمثلة التالية:
echo class7 class9 | sed 's/class/jtp/g' cat msg.txt | sed 's/learn/study/g'
ستحل الأوامر المذكورة أعلاه محل جميع أنماط النص المحددة. النظر في الإخراج أدناه:
من الإخراج أعلاه، عن طريق تنفيذ الأمر 'echo class7 class9 | sed 's/class/jtp/g'' يتم تحويل كل 'class' إلى 'jtp' وبواسطة الأمر 'cat msg.txt | sed 's/learn/study/g'' تم تحويل كل 'التعلم' إلى 'دراسة'.
إزالة الخط
سيسمح لنا الخيار 'd' بإزالة سطر كامل من الملف. نحتاج فقط إلى تحديد كلمة من هذا السطر باستخدام الخيار 'd'، وسيتم حذف هذا السطر. لكن لاحظ أنه سيتم حذف جميع الأسطر التي تحتوي على نفس الكلمة. سيتم تنفيذه على النحو التالي:
cat | sed '//d'
خذ بعين الاعتبار الأمر أدناه:
cat msg.txt | sed '/jtp/d'
سيقوم الأمر أعلاه بحذف الأسطر التي تحتوي على كلمة 'jtp'. النظر في الإخراج أدناه:
من الإخراج أعلاه، عن طريق تنفيذ الأمر 'cat msg.txt | sed '/jtp/d'' يتم حذف جميع الأسطر التي تحتوي على كلمة 'jtp'.
استخدام الأمر sed المتعدد
يتيح لنا الخيار '-e' تنفيذ أوامر sed المتعددة مرة واحدة. يمكننا إجراء أكثر من عملية sed عن طريق تنفيذ الأمر كالتالي:
sed -e ' ; '
خذ بعين الاعتبار الأمر أدناه:
sed -e 's/red/blue/; s/yellow/black/' exm.txt
سيطبق الأمر أعلاه كافة العمليات المحددة في الملف 'exm.txt'. النظر في الإخراج أدناه:
رسم الخرائط في الآلة الكاتبة
كما نرى من الناتج أعلاه، تم استبدال جميع الكلمات 'الحمراء' بكلمات 'زرقاء'، وتم استبدال جميع الكلمات 'الصفراء' بكلمات 'سوداء'. يمكننا أيضًا فصل الأوامر مثل هذا:
sed -e ' >s/red/blue/; >s/yellow/black/' exm.txt
ستكون النتيجة نفس الأمر أعلاه.
قراءة الأوامر من ملف
يمكننا حفظ أوامر sed في ملف وتطبيقها مرة واحدة في أي ملف. ويمكن القيام بذلك عن طريق تحديد الخيار '-f' على النحو التالي:
sed -f
من الأمر أعلاه، فإن '' هو ملف يحتوي على قائمة أوامر sed. خذ بعين الاعتبار الأمر أدناه:
sed -f SedCommands exm.txt
سيقوم الأمر أعلاه بتطبيق كافة الأوامر المحددة في ملف 'SedCommand' على 'exm.txt'. النظر في الإخراج أدناه:
من الناتج أعلاه، استخدمنا الأوامر المطبقة على المثال السابق. وبالتالي فإن الناتج هو نفس المثال السابق.
استبدال الشخصيات
يمكننا استخدام علامة التعجب (!) كمحدد للسلسلة. على سبيل المثال، نريد استبدال bash Shell واستبداله بـ csh shell في ملف '/etc/passwd'. للقيام بذلك، قم بتنفيذ الأمر أدناه:
sed 's//bin/bash//bin/csh/' /etc/passwd
يمكننا تحقيق نفس النتيجة عن طريق تنفيذ الأمر أدناه:
sed 's!/bin/bash!/bin/csh!' /etc/passwd
الحد من السيد
الاستخدام الأساسي للأمر sed يعالج الملف بأكمله. لكن يمكننا تحديد الأمر sed وتحديد أي سطر. هناك طريقتان للحد من الأمر sed:
- مجموعة من الخطوط.
- نمط يطابق سطرًا محددًا.
يمكننا تقديم رقم لتحديد السطر كما يلي:
sed '3s/Red/Blue/' exm.txt
سيطبق الأمر أعلاه العملية المحددة في السطر الثالث. النظر في الإخراج أدناه:
من الناتج أعلاه، تم تعديل السطر الثالث فقط.
يمكننا أيضًا تحديد نطاق من الخطوط. لتحديد نطاق من الخطوط، قم بتنفيذ الأمر كما يلي:
sed '1,3s/Red/Blue/' exm.txt
سيقوم الأمر أعلاه بتحديث النص المحدد في السطرين 1 و3. خذ بعين الاعتبار الإخراج أدناه:
إدراج وإلحاق النص
يتم استخدام العلامة 'i' و'a' لإدراج النص وإلحاقه بالملف. ستضيف العلامة 'i' النص قبل السلسلة، ويتم استخدام العلامة 'a' لإضافة نص بعد السلسلة. خذ بعين الاعتبار الأمر أدناه:
echo 'Another Demo' | sed 'iFirst Demo'
سيقوم الأمر أعلاه بإدراج النص قبل النص 'عرض توضيحي آخر'. النظر في الإخراج أدناه:
لإلحاق النص، قم بتنفيذ الأمر كما يلي:
echo 'Another Demo' | sed 'aFirst Demo'
سيقوم الأمر أعلاه بإلحاق النص. النظر في الإخراج أدناه:
تعديل الخطوط
يتم استخدام العلامة 'c' لتعديل سطر معين. لتعديل السطر، قم بتنفيذ الأمر كما يلي:
sed '3cThis is a modified line.' exm.txt
سيقوم الأمر أعلاه بتحديث السطر الثالث. النظر في الإخراج أدناه:
ج # التاريخ
يمكننا أيضًا استخدام تعبير عادي لتحديث أكثر من سطر له نفس النمط. خذ بعين الاعتبار الأمر أدناه:
sed '/Apple is /c Line updated.' exm.txt
سيقوم الأمر أعلاه بتحديث جميع الأسطر التي تحتوي على السلسلة 'Apple is'. النظر في الإخراج أدناه:
تحويل الشخصيات
يتم استخدام العلامة 'y' لتحويل الأحرف. لا يمكن أن يقتصر تحول الشخصيات على أحداث محددة. لتحويل الأحرف، قم بتنفيذ الأمر كما يلي:
sed 'y/abc/def/' exm.txt
سيقوم الأمر أعلاه بتحويل الأحرف 'a' و'b' و'c' إلى 'd' و'e' و'f'. النظر في الإخراج أدناه:
طباعة أرقام الأسطر
يتم استخدام علامة '=' لطباعة رقم السطر. لطباعة رقم السطر، قم بتنفيذ الأمر كما يلي:
sed '=' exm.txt
سيعرض الأمر أعلاه رقم السطر لمحتوى الملف. النظر في الإخراج أدناه:
تحدد علامة المساواة مع الخيار '-n' رقم السطر الذي يحتوي على برنامج نصي مطابق. النظر في الإخراج أدناه:
sed -n '/mango/=' exm.txt
سيعرض الأمر أعلاه رقم السطر الذي يحتوي على كلمة 'مانجو'. النظر في الإخراج أدناه:
من الناتج أعلاه، يمكننا أن نرى أن السطر رقم 2 يحتوي على كلمة 'مانجو'.