أمثلة على باش سيد

Bash Sed Examples



يتيح لك Bash إجراء استبدال النمط باستخدام توسعة متغيرة مثل ($ {var / pattern / replace}). وهكذا ، هل sed مثل هذا (sed -e ‘s / pattern / replace /’). ومع ذلك ، هناك ما هو أكثر من sed من استبدال الأنماط في الملفات النصية. هنا سوف نعيد اكتشاف sed ، على سبيل المثال ، بأوامر وسير عمل مكافئة للمساعدة في المهام اليومية.

الإعداد لأمثلة Sed

فيما يلي دليل سريع للإعداد للمثال ، والذي سأحاول عدم المبالغة فيه.







كلماتهو ملف نصي يحتوي على الأرقام من 1 إلى 100. إذا لم تكن متأكدًا من أمر إنشائه ، فراجع وظيفة التصدير لـ xargs في أمر تصدير Bash. أنت لا تعرف أبدًا أنه قد يكون في مقابلة البرمجة النصية القادمة.



شريطهو ملف نصي يحتوي على سطر واحد -.



old-phpهو ملف نصي يحتوي على أسطر من PHP القديمة التي ستكسر php7 أو ما بعده. (تلميح: إريج)





لاحظ أن جميع الوظائف الموضحة أعلاه يمكن العثور عليها أدناه في التعليق الختامي حول وظائف الإعداد.

أمثلة Sed مع أوامر مكافئة

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



1. طباعة سطر عشوائي (يكافئ الفرز -R - | head -1)

سيد '$ ((عشوائي 100٪)) ص-

2- اطبع آخر سطر في الملف (ما يعادل العنوان -1 -)

سيد '$ p'-

3. طباعة أول 10 أسطر في ملف (ما يعادل head -n 10 -)

سيد '10Q'-

4. طباعة السطر الأول في ملف (ما يعادل الذيل -1 -)

سيد '1 بكسل'-

5. احذف جميع مثيلات الحرف (ما يعادل tr –delete '0' - ، حيث يمثل 0 الحرف الذي نريد حذفه)

سيد 's / 0 // g'-

6. تحويل ملف csv إلى tsv (ما يعادل tr '،' t '-)

سيد 's /، / t / g'-

7- إلحاق سطر بالملف (ما يعادل شريط القط -)

سيد '$ a ---'-

8. إضافة سطر إلى ملف مسبقًا (مكافئ لـ cat - bar)

سيد '1i ---'-

9. اطبع جميع الأسطر الموجودة في الملف (ما يعادل cat -)

سيد 'ع'-

10. طباعة سطور مطابقة للنمط (ما يعادل grep -e '^ 1' -)

سيد '/ ^ 1 / p'-

11. احذف الأسطر المطابقة للنمط (ما يعادل grep -v -e '^ 1' -)

سيد '/ ^ 1 / د'-

12. احصل على عدد الأسطر في ملف (ما يعادل wc -l -)

سيد '$ ='-

13. الكتابة إلى ملف في الخلفية (نقطة الإنطلاق المكافئة)

سيد 'في{1} دولار'-

مثال على استخدام sed لتنفيذ الأمر tee

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

أوامر

قمزة ()
{
اختبار {#} دولار -مكافئ 1 || إرجاع؛
سيد 'في{1} دولار'-
}
الأساسية()
قمزةهذه؛
قطهذه

الأساسية

انتاج |

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

هنا سترى قائمتين للأعداد الصحيحة من 1 إلى 10. الأولى من الأمر seq. الثانية نحصل عليها من قطة الملف المكتوب في نقطة الإنطلاق. أعلم أنها سخيفة لكنها تعمل!

مثال باستخدام sed لطباعة سطر عشوائي في ملف

افترض أننا نريد طباعة سطر عشوائي في ملف باستخدام bash وقليلًا من sed. هل نستطيع إنجازها؟ نعم نستطيع! إليك الطريقة.

تنفيذ وظيفة

  1. يحصل على عدد الأسطر في ملف ، L
  2. يولد رقمًا عشوائيًا بين 1 و L ، R
  3. يطبع R

تتوقع الوظيفة أن يتم توصيل المدخلات من الخارج.

أوامر

بعض الخط()
{
وظيفةل()
{
سيد '$ ='-
}؛
وظيفةخط الطباعة()
{
سيد '{1} دولارص-
}؛
مؤقت= دولار( mktemp )؛
قط-> $ {temp}؛
قط $ {temp} |خط الطباعة $((عشوائي٪$( قط $ {temp} |ل)+1 ))؛
جمهورية مقدونيا $ {temp}
}

مثال على الاستخدام (1)

فيما يليها 100 |_

الإخراج (1)

35

استخدام مثال (2)

حليقة https://linuxhint.com/bash_cut_command/ --صامتة |علامات الشريط|بعض الخط

انظر إلى المثال أدناه ، باستخدام sed لتجريد علامات HTML. لاحظ أن المثال over في بعض الأحيان يُرجع فارغًا للأسطر الفارغة. كتمرين ، يمكن تحسينه.

استخدام sed لطباعة سطور في ملف

افترض أنك تريد تنفيذ وظيفة في bash لطباعة سطر معين في ملف. محاولة طباعة سطر واحد في ملف باستخدام حلقة في bash ، أو head ، أو tail ، أو awk هو عمل كثير جدًا لطباعة سطور في ملف. شيء جيد لدينا سيد. ستكون الوظيفة الناتجة باستخدام sed كما يلي.

أوامر

خط الطباعة()
{
سيد '{1} دولارص-
}

الآن دعونا نرى ما يحدث عندما نستخدم سطر الطباعة على الكلمات.

أوامر

كلمات|خط الطباعةخمسون

انتاج |

خمسون

تمام. تبدو جيدة ولكن دعونا نجرب شيئًا يبدو أقل تافهة.

أوامر

يعلن -xfكلمات
يعلن -xfخط الطباعة
فيما يليها 1 10$(كلمات| مرحاض -ال ) | xargs-أناسحق كلمات | خط الطباعة {} '

انتاج |

1
أحد عشر
واحد وعشرين
31
41
51
61
71
81
91

تمام. الآن هذا هو أكثر من ذلك! ترى كيف يمكن استخدام sed في برنامج نصي باش لطباعة أي سطر في الملف.

أمثلة Sed بدون أوامر مكافئة

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

أمر جميع الأسطر في برنامج شل النصي

سيد 's / ^ / # /'-
احذف السطر الأول
سيد '1 يوم'-
حذفالاخيرخط
سيد '$ d'-
أدخل خطًا قبل الأسطر المطابقة للنمط
سيد '/ 0 $ / i ---'-
أدخل خطًا بعد الأسطر التي تتطابق مع النمط
سيد '/ 0 $ / ---'-
قم بإزالة علامات html
سيد 's /†*.// g'-
ترقية eregفيكود php القديم للتشغيلفيphp7 أو أحدث
سيد / ereg ( ([^،] * ). ([^)] * ) ./ strpos ( 2، 1) / g '
التحقق منلو سيدأقدم من إصدار معين
سيد الإصدار 4.5-

مثال على إصدار sed المتفرع في bash

أعلاه في الأمثلة ، يوجد سطر للتحقق مما إذا كان sed أقدم من إصدار معين يمكننا استخدامه لتنفيذ تفرع الإصدار في bash ، والذي أعتقد أنه أسهل من محاولة تنفيذ دالة لمقارنة أرقام الإصدارات من إخراج sed –version . المشكلة الوحيدة هي أنه إذا كان هناك إصدار سابق من sed لا يدعم الأمر v ، فنحن في مشكلة.

أوامر

اختبار-نسخة-على الأكثر() {
رما - طرد - قذف | سيد 'الخامس{1} دولار'-2> /ديف/باطل
}
نسخة تجريبية()
{
رما - طرد - قذف 'إصدار{1} دولار. تمام. افعلها؛
اختبار-نسخة-على الأكثر{1} دولار && {
رما - طرد - قذف 'قديم'؛
حقيقية
} || {
رما - طرد - قذف 'الجديد'
}؛
رما - طرد - قذف ' طريق.'
}
الأساسية()
{
محليالخامس؛
لالخامسفي 4.{4و5}؛
فعل
نسخة تجريبية$ {v}؛
انتهى
}
الأساسية

انتاج |

إصدار4.4. تمام. افعلها بالطريقة القديمة.
إصدار4.5. تمام. افعلها بالطريقة الجديدة

لاحظ أن إصدار sed الذي يعمل على جهازي عند كتابة هذه الأحرف هو 4.4 ، وهو ما يفسر الناتج أعلاه. أيضًا ، في نفس الوقت ، كان أحدث إصدار من gnu sed 4.7 ، أي حوالي 3 سنوات أقدم من الإصدار الذي أملكه. سيدتي قديمة! في الواقع ، في sed 4.0.6 ، تمت إضافة معلمة إلى أمر الإصدار لذا تعمل هذه الإستراتيجية مع أي إصدار يقال على الأقل v4.0.6 ، وهو متساهل بالنظر إلى أن الإصدار تم إصداره في أوائل عام 2003. أنت جيد.

لقد قمت ببعض التنقيب الإضافي ، في الواقع قرأت NEWS من أحدث كود مصدر. يحتوي الإصدار 4.6 على ميزة جديدة ، وهي –debug الذي يفرغ البرنامج النصي ويعلق على سطور الإخراج. سيسمح لك هذا بترجمة نصوص sed التي تم إنشاؤها بواسطة وظائف في bash إلى صيغة متعارف عليها. رائع! فقط لا تنس أنك بحاجة إلى إصدار sed متفرع في bash. هذا هو المكان الذي يأتي فيه هذا المثال sed.

مثال على دالة bash باستخدام sed لتجريد علامات HTML

في الأمثلة أعلاه ، يوجد سطر لاستخراج علامات HTML. دعنا نضع ذلك في وظيفة bash ونستخدمها لإزالة جميع علامات HTML من المقالة الأخيرة التي كتبتها.

أوامر

علامات الشريط()
{
سيد 's /†*.// g'-
}
حليقة https://linuxhint.com/bash_cut_command/ --صامتة |علامات الشريط

لا أستطيع أن أقول أنه مثالي ولكن على الأقل يمكن قراءته في المحطة.

أمثلة Sed مع تدفقات العمل: مثال على سير العمل: استبدل الكل بأمان باستخدام find و grep و sed

من الآمن أن نقول إن التغييرات التي تم إجراؤها باستخدام sed مع الخيار -i لا رجعة فيها. هذا ما لم تكن متأكدًا تمامًا من النص الذي سيتم استبداله ، فمن المحتمل أن ينتهي بك الأمر بحرف واحد أقل من المقصود. لهذا السبب في هذا المثال ، سنستخدم sed في سير عمل لاستبدال النص بأمان في جميع الملفات التي حددتها.

سير العمل

  1. تجد
  2. سيطرة
  3. سيد
تجد

هنا ستختار الملفات التي سيتم استبدالها. أقترح استخدام أمر على غرار هذه الأسطر:

تجد -نوعF-اسم | سيطرة -الخامس| xargs-أنا ...

على سبيل المثال ، قد ترغب في تقييد الملفات لاستبدال ملفات PHP باستثناء أدلة مستودع git على النحو التالي.

تجد -نوعF-اسم*.بي أتش بي| سيطرة -الخامس '.يذهب' | xargs -أنا...

اقرأ المزيد عن أمر xargs في bash.

سيطرة

بعد ذلك ، سنحاول مطابقة بعض الأنماط في الملفات المحددة على النحو التالي. لاحظ أنه نظرًا لأننا نستخدم الخيار -o لـ grep ، فلن يعرض الإخراج سوى السلسلة المتطابقة إن وجدت.

تجد -نوعF-اسم*.بي أتش بي| سيطرة -الخامس '.يذهب' |
xargs -أنا سيطرة بعض الأنماط-أو

يجب أن يُرجع الأمر أعلاه قائمة بسلسلة تطابق some_pattern.

سيد

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

تجد -نوعF-اسم*.بي أتش بي| سيطرة -الخامس '.يذهب' |
xargs -أنا سيد -أنا س/بعض الأنماط/إستبدال/ز

يصبح الأمر grep هو sed -i ويتم حذف الخيار -o. وهناك لديك.

يمكنك الآن التحقق من الخيوط التي سيتم استبدالها في sed مسبقًا بدلاً من اختبار حظك.

التعليقات الختامية على الخيارات المستخدمة في الأمثلة

فيما يلي قائمة بالخيارات المستخدمة في أمثلة sed التي تمت مناقشتها بإيجاز.

خيار وصف
-أنا تحرير في المكان. إذا كان الإدخال عبارة عن ملف (غير مدمج) ، فستستبدل نتيجة التعبيرات محتويات الملف.

يقبل Sed واحد

على سبيل المثال) sed -n…

-e تعني التعبير. المعلمة الخاصة بها هي تعبير في لغة sed.

يقبل Sed الكثير

على سبيل المثال) sed -e'expr1 '-e'expr2'

يخفي الخط الذي لا يتأثر بالتعبير. هذا إذا كان التعبير عبارة عن تعليمة طباعة بلغة sed ، فلن يتم تضمين الأسطر غير المضمنة في عبارة print في الإخراج.

على سبيل المثال) sed -n…

لمزيد من المعلومات حول خيارات sed المتاحة ، انظر sed –help

ملاحظات النهاية على أوامر مكافئة تستخدم في الأمثلة

يتم تضمين أدوات سطر الأوامر المساعدة التالية في أمثلة sed بأوامر مكافئة.

  • نوع
  • رئيس
  • ذيل
  • سيطرة
  • قط
  • NS
  • قمزة

تعليق ختامي على اللاحقة - في أمثلة الأوامر المكافئة

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

قطبعض الملفات| نوع -| رئيس -1

ومع ذلك ، عند وجود الأمر الموجود على اليد اليسرى الأنبوب ، يمكننا حذف التلميح على النحو التالي.

قطبعض الملفات| نوع | رئيس -1

هذا ما كان يحدث مع - الحرف بعد الأوامر في الأمثلة.

التعليقات الختامية على وظائف الإعداد

إذا كنت تبحث ، فإليك وظائف الإعداد للأمثلة المذكورة أعلاه. الناتج الذي تم الحصول عليه باستخدام إعلان -f. اقرأ المزيد عن أمر التصريح في bash لمزيد من الاستخدامات.

أوامر

كلمات()
{
فيما يليها 100
}
شريط()
{
رما - طرد - قذف -
}
old-php()
{
رما - طرد - قذف 'ereg ($ UA،' Bottybot ')'
}

الحد الأدنى

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