Advanced sed: إدارة تدفقات النص في Linux. Sed - أوه نعم Linux Wiki sed أمثلة لينكس

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

لذلك ، بشكل افتراضي ، يبدو أن هذه الأداة يجب أن تكون موجودة بالفعل على نظامك (في حالتي ، في Debian 7.6 كنت أمتلكها بالفعل) ، إذا لم يكن كذلك ، إذن -

مع النص:

تشير المعلمة "s" في البداية إلى ضرورة استبدال النص ، g - في نهاية النص المستبدل - ما يجب القيام به عالميًا (في جميع أنحاء الملف)

على سبيل المثال ، نريد استبدال كلمة Sergey بكلمة Andrey في ملف text.txt الخاص بنا وتحميل كل هذا إلى ملف textout.txt ، تابع:

sed "s / Sergey / Andrey / g" text. txt\u003e textout. رسالة قصيرة

نتيجة:

إذا كنت تريد إجراء استبدالات للأحرف الخاصة - على سبيل المثال ، للحرف & ، فأنت بحاجة إلى ذلك قبل خاص ضع شرطة مائلة للخلف "\\" بحرف ، إذا كان من الضروري الإشارة إلى ما يحتاج sed للرجوع إلى بداية السطر ، فاستخدم الحرف الخاص "^" بالإضافة إلى ذلك ، يمكنك كتابة تغييرين أو أكثر في سطر واحد ، مع الفصل بينهما بفاصلة منقوطة - "؛". على سبيل المثال ، نقوم بتعذيب ملف textout.txt الذي تم تغييره بالفعل. أولاً ، سأعرض المحتوى الحالي لملف textout.txt مرة أخرى:

الجذر @ testhostname: ~ # cat textout.txt

اختبار لأندري

اختبار 2 لأندريه

اختبار 3 لأندريه

الآن ندخل الأمر:

sed "s / for / \\ & / g؛ s / ^ Test / Sergey / g" textout. txt\u003e textout2. رسالة قصيرة

وبالتالي ، بدلاً من كلمة for ، نضع الرمز & (يتم إدخال الحرف الخاص بـ "\\" قبل الحرف الخاص) ، ثم علامة الفصل (بحيث يمكن كتابة جميع التغييرات في سطر sed واحد -\u003e "؛ بدلاً من الكلمة في بداية السطر "Test" ضع كلمة Sergey ، نتيجة ما حدث:

كل شيء كما أردنا!

أيضا ، sed هو مساعد جيد لعرض السجلات. على سبيل المثال ، نحتاج إلى تفريغ جميع سطور تاريخ اليوم (دعنا في حالتنا 10 أكتوبر) من ملف السجل / var / log / messages إلى ملف testlog.txt ، فلنبدأ:

sed - n "/ ^ Oct 10 / p" / var / log / messages\u003e testlog. رسالة قصيرة

لقد أضفنا هنا المعلمة -n ، ثم - '/ ^ Oct 10 / - مما يعني أن السطر يجب أن يبدأ من تاريخ 10 أكتوبر ، ثم المعلمة p - بمعنى طباعة (اطبع المحتوى بموجب هذا الشرط) ، ثم ملف المصدر والملف الذي نتواجد فيه ، دعنا نتخلص من النتائج حسب شرط الفلتر الخاص بنا ، وقم بتشغيله ، ونرى ما يحتويه ملف testlog.txt حصريًا في 10 أكتوبر:

بخير! إذا لم تكن بحاجة إلى العديد من الأسطر ، ولكن هناك حاجة إلى الانتقال من السطر الأول إلى السطر الخامس فقط ، فإننا نفصل استعلامنا الحالي بـ "|" إزالة التفريغ في ملف testlog.txt وكتابة sed -n 1،5p - مما يعني أننا نحتاج إلى طباعة (p - طباعة في نهاية التعبير) من أول "1" إلى (مفصول بفاصلات) الخامس خط "5". في المجموع ، نحصل على شيء مثل هذا:

sed - n "/ ^ Oct 10 / p" / var / log / messages | sed - ن 1 ، 5p\u003e testlog - 5strok.txt

مرة أخرى ، ألفت انتباهكم إلى حقيقة أن الملف الذي نحمل فيه النتائج قد تم نقله إلى النهاية (testlog-5strok.txt) ، ونرى نتيجة أفعالنا:

تم إنشاء المستند: 02/16/2010

مثال آخر

بالنسبة لي في * .txt ؛ do sed -i "/ ^ \\ ^ / s / ^ \\ ^ \\ ([^ \\ ^] * \\) \\ ^ \\ ^ / \u003d\u003d\u003d\u003d \\ 1 \u003d\u003d\u003d\u003d / ؛ / ^ \u003d / s / $ / \\ n ^ الأمر ^ الوصف ^ / "$ i؛ انتهى

يتنقل هذا السطر عبر جميع الملفات الموجودة في الدليل الحالي والتي تنتهي بـ .txt ، و:

    / ^ \\ ^ / s / ^ \\ ^ \\ ([^ \\ ^] * \\) \\ ^ \\ ^ / \u003d\u003d\u003d\u003d \\ 1 \u003d\u003d\u003d\u003d / - إذا كان السطر يبدأ بـ "^" ، استبدل "^ Text ^ ^ ". إلى "\u003d\u003d\u003d\u003d نص \u003d\u003d\u003d\u003d" ؛

    / ^ \u003d / s / $ / \\ n ^ الأمر ^ الوصف ^ / - إذا كان السطر يبدأ بـ "\u003d" (ويبدأ ، لأننا فعلناه في الفقرة السابقة بأنفسنا ، وهنا الشرط مخصص فقط للمس الباقي من السطور) ، استبدل هذا السطر به ، بالإضافة إلى حرف إرجاع ، بالإضافة إلى "^ Command ^ Description ^". بمعنى آخر ، أدخل بعد هذا السطر سطرًا يحتوي على "^ Command ^ Description ^".

ما الهدف من هذا؟ هذا ما هو عليه. لقد قسمت ملف dokuwiki طويل بأوامر لينكس إلى ملفات صغيرة. اتضح أنهم مثل:

^ تحليل نظام الملفات ^^ | badblocks -v / dev / hda1 | تحقق من قسم hda1 للكتل التالفة | ...

هذا التسلسل من الأوامر جعلهم جميعًا معروضين:

تحليل نظام الملفات \u003d\u003d\u003d\u003d ^ الأمر ^ الوصف ^ | badblocks -v / dev / hda1 | تحقق من قسم hda1 للكتل التالفة | ...

حذف صف حسب السياق

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

Sed -i "/ ^ AUTO_SAVE / d" notes.ini

يزيل هذا الأمر في ملف notes.ini كل الأسطر التي تبدأ بـ AUTO_SAVE.

حذف سطر أو عدة أسطر في ملف

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

Sed -i "2،1d"

هذا الأمر في الملف يحذف السطر الثاني.

Sed -i "5،10d"

هذا الأمر في الملف سيحذف عشرة أسطر تبدأ من الخامس (بما في ذلك الخامس).

سلاسل متسلسلة

اربط سلسلتين متجاورتين في أزواج

قم بتسلسل سطرين في أزواج مفصولة بحرف إرجاع:

القط / الخ / المضيفين | sed "N ؛ s / \\ n / - /"

ملاحظة. فاصل: "-".

التحويل إلى حالة الأحرف الكبيرة أو الصغيرة

إلى الحالة العليا:

صدى سيد | sed "s /.*/ \\ U & /" SED

للأحرف الصغيرة:

صدى سيد | sed "s /.*/ \\ L & /" sed

"قص" جزء من التيار

لنأخذ ناتج حفر كمثال:

$ dig ya.ru

سوف يعطينا

; <<>\u003e DiG 9.7.0-P1<<>\u003e ya.ru ؛؛ الخيارات العالمية: + cmd ؛؛ حصلت على إجابة: ؛؛ - \u003e\u003e رأس<<- opcode: QUERY, status: NOERROR, id: 5252 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ya.ru. IN A ;; ANSWER SECTION: ya.ru. 4194 IN A 87.250.251.3 ya.ru. 4194 IN A 93.158.134.3 ya.ru. 4194 IN A 213.180.204.3 ya.ru. 4194 IN A 77.88.21.3 ya.ru. 4194 IN A 87.250.250.3 ;; Query time: 0 msec ;; SERVER: 192.168.2.9#53(192.168.2.9) ;; WHEN: Wed Nov 10 14:33:37 2010 ;; MSG SIZE rcvd: 103

ومن خلال القيام بما يلي:

حفر ya.ru | sed "0، / قسم الإجابة: / d؛ / ^ $ / q"

Ya.ru. 4160 IN A 93.158.134.3 ya.ru. 4160 IN A 213.180.204.3 ya.ru. 4160 في A 77.88.21.3 ya.ru. 4160 IN A 87.250.250.3 ya.ru. 4160 في 87.250.251.3

    0، / ANSWER SECTION: / d - لحذف جميع خطوط التدفق من الأول إلى السطر الذي يحتوي على "قسم الإجابة:" ، بما في ذلك

    / ^ $ / q - بمجرد مصادفة سلسلة فارغة ، توقف عن المعالجة الإضافية.

أمثلة 1

تمرين:

Cat / etc / passwd\u003e ./test

سيد وصف
القط. / الاختبار | sed -e "s / systemd / SysV / g؛ s / Management / Unmanaged /"تطبيق بديلين على كل سطر
القط. / الاختبار | sed -n "s / systemd / SysV / p"اطبع السلاسل المستبدلة فقط. -n - يمنع الإخراج العادي.
القط. / الاختبار | sed "s / systemd / SysV / w ./out"استبدال الإخراج لملف الخروج
القط. / الاختبار | sed "41s / systemd / SysV /"استبدل في السطر 41
القط. / الاختبار | sed "41،44s / systemd / SysV /"عوّض في الأسطر من 41 إلى 44 ضمناً.
القط. / الاختبار | sed "41، $ s / systemd / SysV /"استبدل الأسطر من 41 إلى آخرها.
القط. / الاختبار | sed "/ games /، / syslog / s! / usr / sbin / nologin! / bin / bash!"استبدل الأسطر بين الأسطر التي تحتوي على ألعاب و syslog شاملة
القط. / الاختبار | sed "1c \\ DELETED"استبدل السطر الأول تمامًا
القط. / الاختبار | sed "1،5c \\ DELETED"استبدلها بأسطر النص من 1 إلى 5 ضمناً
القط. / الاختبار | sed "y !: / !؛ \\\\!"استبدل ":" بـ "؛" و "/" بـ "\\"
القط. / الاختبار | sed "\u003d"طباعة أرقام الأسطر أيضا
القط. / الاختبار | sed -n "/ systemd / \u003d"طباعة أرقام الأسطر حيث تحدث سلسلة فرعية
أدخل محتويات الملف في الدفق (خارج):
القط. / الاختبار | sed "1rout"بعد سطر واحد
القط. / الاختبار | sed "$ r out"بعد السطر الأخير
القط. / الاختبار | sed "1،4rout"بعد 1 و 2 و 3 و 4 أسطر
القط. / الاختبار | sed "/ syslog / r out"بعد السطر الذي يحتوي على سجل النظام
حذف الأسطر:
القط. / الاختبار | sed "/ games /، / syslog / d"والتي تقع بين السطور التي تحتوي على الألعاب و syslog شاملة
القط. / الاختبار | Sed "3،5d"من 3 إلى 5
القط. / الاختبار | sed "5، $ d"من 5 إلى النهاية

Sed هو خفيف الوزن (ثنائي يزن 128 كيلو بايت فقط) وأداة معالجة نصوص يدوية.

في هذه المقالة سأقدم بعض الأمثلة البسيطة عن كيفية الاستخدام سيد ويخبرك عن ميزاته الرئيسية.

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

تنسيق الأمر Sed

الأمر sed له التنسيق:

sed [-n] [-e script] [-f script file] [الملفات]

علم يمنع الإخراج
-e - يشير إلى قائمة التعليمات الواردة في سطر الأوامر.
-F - يشير إلى موقع ملف البرنامج النصي.

تنسيق أوامر التحرير

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

[العنوان [، العنوان]] الأمر [الوسيطات]

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

$ - الخط الأخير
ابدأ ~ N - كل ن-السطر يبدأ من الرقم بداية
/تعبير عادي/ - سلاسل تطابق التعبير العادي
أمثلة:

1~2 - كل سطر ثاني / REGEXP / - كل الأسطر التي تحتوي على / REGEXP / 10,20 - الأسطر من 10 إلى 20 10,+10 - الأسطر من 10 إلى 20 5، ~ ن - الأسطر من المضاعف الخامس إلى الأول ن 5 ، / REGEXP / - خطوط تحتوي على / REGEXP /، بعد اليوم الخامس (لا يشمل اليوم الخامس)
  • إذا لم يتم تحديد أي عنوان ، فستتم معالجة جميع الأسطر.
  • إذا تم تحديد عنوان واحد ، تتم معالجة السطر المقابل
  • إذا تم تحديد عنوانين ، فسيتم تحديد الأسطر في الفاصل الزمني المحدد.
  • !فريق - إجراء فريق، للأسطر التي لم يتم تحديدها حسب العنوان.

أوامر أساسية

لنفكر في الأوامر الرئيسية:

[عنوان] نص - إضافة سطر جديد مع النص بعد السطر المحدد

$ cat sed_test sed_test_1 11111 sed_test_2 22222 sed_test_3 33333 $ sed -e "2 a new_line" sed_test sed_test_1 11111 sed_test_2 22222 new_line sed_test_3 33333

نص [العنوان [، العنوان]] ج - حذف الخطوط المحددة واستبدالها بـ نص

$ sed -e "2 s new_line" sed_test sed_test_1 11111 new_line sed_test_3 33333 $ sed -e "/ 3 / s new_line" sed_test sed_test_1 11111 sed_test_2 22222 new_line

[العنوان [العنوان]] د - حذف الأسطر المحددة.

$ sed -e "2 d" sed_test sed_test_1 11111 sed_test_3 33333 $ sed -e "2! d" sed_test sed_test_2 22222

[العنوان] أنا نص - معجون نص بدلا من الخط المحدد.

$ sed -e "2 i new_line" sed_test sed_test_1 11111 new_text sed_test_2 22222 sed_test_3 33333

[العنوان [، العنوان]] ص (مع العلم ) يعرض الخطوط التي تم العثور عليها.

$ sed -ne "2p" sed_test sed_test_2 22222

[العنوان] ف - خروج سيد.

[عنوان [، عنوان]] ملف ص - يقرا ملف ويصدر محتواه للخروج.

[العنوان [، العنوان]] s / regex / replace / flags - يستبدل تعبير عادي تشغيل إستبدال- مع مراعاة الأعلام:

  • ز - في خط كامل
  • أنا - غير حساس لحالة الأحرف
  • p - عرض نتيجة الاستبدال
$ sed -ne "s / t / T / g" sed_test sed_TesT_1 11111 sed_TesT_2 22222 sed_TesT_3 33333 $ sed -e "s // d / g" sed_test sed_test_d ddddd sed_test_d ddddd sed_test_d ddddd

[العنوان [، العنوان]] y / line1 / line2 / - يستبدل كل تكرارات الأحرف بتنسيق خط 1 مطابقة الأحرف من السلاسل 2... يجب أن تكون أطوال الخطوط هي نفسها.

$ sed -ne "y / est / EST / g" sed_test SEd_TEST_1 11111 SEd_TEST_2 22222 SEd_TEST_3 33333

[العنوان [، العنوان]] (أوامر) - أوامر مجموعة الأقواس
[العنوان] \u003d - يعطي أرقام الأسطر

العلامات

: ضع الكلمة المناسبة - مباراة مجموعة من الفرق ضع الكلمة المناسبة
ب التسمية ضع الكلمة المناسبة، اذا كان ضع الكلمة المناسبة مفقود ، ثم انتقل إلى نهاية الملف الدفعي.

ر التسمية - القفز إلى الأمر المشار إليه بواسطة الملصق ضع الكلمة المناسبة فقط بعد الاستبدال الناجح باستخدام الأمر س ///

دورة التنفيذ

يعمل sed على اثنين من مخازن البيانات المؤقتة: رئيسي ومساعد. في البداية ، كلا المخازن المؤقتة فارغة.
يتم تنفيذ العمل مع هذه المخازن المؤقتة باستخدام الأوامر: \\\\ "h" ، "H" ، "x" ، "g" ، "G" D " ح - استبدال محتويات المخزن المؤقت الإضافي بمحتويات الرئيسية
ح - أضف سطرًا جديدًا إلى المخزن المؤقت الإضافي ثم قم بإلحاق محتويات المخزن المؤقت الرئيسي بمحتويات الجهاز المساعد
x - تبديل محتويات كلا المخازن المؤقتة في الأماكن
ز - استبدل محتويات المخزن المؤقت الرئيسي بمحتويات الجهاز المساعد
جي - أضف سطرًا جديدًا إلى المخزن المؤقت الرئيسي ثم قم بإلحاق محتويات المخزن المؤقت الإضافي بمحتويات المخزن الرئيسي
د - احذف نص المخزن المؤقت الرئيسي حتى حرف تغذية السطر التالي
ن - أضف سطرًا جديدًا إلى المخزن المؤقت الرئيسي ، ثم أضف السطر التالي المعالج هناك
ص - إخراج محتويات المخزن المؤقت الرئيسي حتى حرف تغذية السطر التالي.

أمثلة أكثر تعقيدًا

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

$ cat tac.sed #! / usr / bin / sed -nf # بدءًا من السطر الثاني ، يتم إلحاق محتويات المخزن المؤقت (الذي يحتوي بالفعل على # جميع الأسطر السابقة) بالسطر الحالي. واحد! G # عند الوصول إلى السطر الأخير ، نطبع $ p # نكتب البيانات في المخزن المؤقت مرة أخرى h sed -nf tac.sed sed_test sed_test_3 33333 sed_test_2 22222 sed_test_1 11111

نقرأ سطور الملف (اعرض رقم السطر الأخير)

عدد القط $ .sed #! / usr / bin / sed -nf $ \u003d

نتيجة

$ Sed -nf count.sed sed_test 3

عكس الأوتار

قطة عكسية $ #! / usr / bin / sed -f # تخطي الأسطر ذات الحرف الواحد /../! ب # عكس السلسلة. أضف سطرًا فارغًا قبل السطر الحالي وبعده. س /٪ [البريد الإلكتروني محمي]~ *! G4؛:٪ # `. * $ / \\ & \\ / # انقل الحرف الأول إلى النهاية # تعمل الحلقة طالما هناك أحرف في السطر الأوسط. tx: xs / \\ (\\\\ n. \\) \\ (. * \\) \\ (. \\\\ n \\) / \\\\ 3 \\\\ 2 \\\\ 1 / tx # إزالة فواصل الأسطر غير الضرورية s / \\\\ n // ز

هذا البرنامج النصي ينقل حرفين في وقت واحد.

$ sed -f reverse.sed sed_test 11111 1_tset_des 22222 2_tset_des 33333 3_tset_des

معلومة اضافية

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

في المرة الأخيرة التي تحدثنا فيها عن الوظائف في نصوص bash ، على وجه الخصوص ، كيفية استدعائها من سطر الأوامر. موضوعنا اليوم هو أداة مفيدة جدًا لمعالجة بيانات السلسلة - أداة لينوكس تسمى sed. غالبًا ما يستخدم للعمل مع النصوص في شكل ملفات السجل والتكوين وملفات أخرى.



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

سنغطي الآن أساسيات العمل مع sed ، وكذلك نلقي نظرة على أكثر من ثلاثين مثالاً لاستخدام هذه الأداة.

أساسيات Sed

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

ملف $ sed options
بشكل افتراضي ، تطبق sed قواعد مجموعة الأوامر المحددة في الاستدعاء إلى STDIN. يسمح هذا بتمرير البيانات مباشرة إلى sed.

على سبيل المثال ، مثل هذا:

صدى $ "هذا اختبار" | sed "s / test / another test /"
إليك ما تحصل عليه عند تشغيل هذا الأمر.


مثال بسيط على استدعاء sed

في هذه الحالة ، يستبدل sed كلمة "test" في السطر الذي تم تمريره للمعالجة بالكلمات "another test". لتنسيق القاعدة لمعالجة النص المحاط بعلامات اقتباس ، يتم استخدام خطوط مائلة للأمام. في حالتنا ، يتم استخدام أمر مثل s / pattern1 / pattern2 /. الحرف "s" هو اختصار لكلمة "بديل" ، أي أننا نواجه أمر استبدال. سيقوم Sed ، بتنفيذ هذا الأمر ، بمسح النص المنقولة واستبدال الأجزاء الموجودة فيه (أي منها ، سنتحدث أدناه) ، المقابلة للنمط 1 ، بالنمط 2.

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

يوجد أدناه ملف يحتوي على جزء من النص ، ونتائج معالجته بهذا الأمر:

$ sed "s / test / another test" ./myfile


ملف نصي ونتائج معالجته

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

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

تنفيذ مجموعات الأوامر عند استدعاء sed

لإجراء معالجات متعددة للبيانات ، استخدم مفتاح التبديل -e عند استدعاء sed. على سبيل المثال ، إليك كيفية ترتيب استبدال نصين:

$ sed -e "s / This / That /؛ s / test / another test /" ./myfile


استخدام مفتاح -e عند استدعاء sed

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

$ sed -e "\u003e s / This / That /\u003e s / test / another test /" ./myfile
هذا ما يحدث بعد تنفيذ الأمر المقدم في هذا النموذج.


طريقة أخرى للعمل مع sed

قراءة أوامر من ملف

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

هذا هو محتوى ملف mycommands:

S / هذا / هذا / ق / اختبار / اختبار آخر /
دعونا نسمي sed ، ونمرر ملف الأوامر والملف المراد معالجته إلى المحرر:

$ sed -f mycommands ملفي
تكون النتيجة عند استدعاء مثل هذا الأمر مشابهة لتلك التي تم الحصول عليها في الأمثلة السابقة.


استخدام ملف به أوامر عند استدعاء sed

أعلام أمر الاستبدال

ألق نظرة فاحصة على المثال التالي.

$ sed "s / test / another test /" myfile
هذا هو ما يوجد في الملف وما سيحصل عليه sed بعد معالجته.


الملف الأصلي ونتائج معالجته

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

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

S / نمط / استبدال / أعلام
يمكن تعديل تنفيذ هذا الأمر بعدة طرق.

  • عند إرسال الرقم ، يتم أخذ الرقم التسلسلي لحدوث النمط في السلسلة في الاعتبار ؛ سيتم استبدال هذا التكرار المعين.
  • تشير علامة g إلى معالجة جميع تكرارات النمط في السلسلة.
  • تشير العلامة p إلى طباعة محتويات السلسلة الأصلية.
  • علم للنموذج w file يخبر الأمر بكتابة نتائج معالجة النص إلى ملف.
ضع في اعتبارك استخدام المتغير الأول لأمر الاستبدال ، الذي يشير إلى موضع التكرار المستبدل للجزء المطلوب:

$ sed "s / test / another test / 2" myfile

استدعاء أمر الاستبدال الذي يشير إلى موضع القطعة المراد استبدالها

لقد أشرنا هنا ، كعلم بديل ، إلى الرقم 2. وقد أدى ذلك إلى حقيقة أنه تم استبدال التكرار الثاني فقط للنمط المطلوب في كل سطر. لنجرب الآن علامة الاستبدال العامة - g:

$ sed "s / test / another test / g" myfile
كما ترى من الإخراج ، استبدل هذا الأمر جميع تكرارات النمط في النص.


الاستبدال العالمي

تسمح لك علامة أمر الاستبدال p بطباعة الأسطر المتطابقة ، لكن المفتاح -n المحدد عند استدعاء sed يمنع الإخراج العادي:

$ sed -n "s / test / another test / p" myfile
نتيجة لذلك ، عند تشغيل sed في هذا التكوين ، لا يتم عرض سوى الأسطر (في حالتنا ، سطر واحد) حيث تم العثور على جزء النص المحدد.


باستخدام علامة الأمر p replace

دعنا نستخدم العلم w ، الذي يسمح لنا بحفظ نتائج معالجة النص في ملف:

$ sed "s / test / another test / w output" myfile


حفظ نتائج معالجة النص في ملف

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

فواصل

تخيل استبدال / bin / bash بـ / bin / csh في / etc / passwd. المهمة ليست بهذه الصعوبة:

$ sed "s / \\ / bin \\ / bash / \\ / bin \\ / csh /" / etc / passwd
ومع ذلك ، كل هذا لا يبدو جيدًا جدًا. والحقيقة هي أنه نظرًا لاستخدام الشرطات المائلة للأمام كأحرف فاصلة ، يجب تخطي نفس الأحرف الموجودة في السطور التي تم تمريرها إلى sed. نتيجة لذلك ، تتأثر سهولة قراءة الأمر.

لحسن الحظ ، يسمح لنا sed بتحديد أحرف الفاصلة بأنفسنا لاستخدامها في أمر الاستبدال. المحدد هو الحرف الأول الذي يتم مواجهته بعد s:

$ sed "s! / bin / bash! / bin / csh!" / etc / passwd
في هذه الحالة ، يتم استخدام علامة التعجب كفاصل ، ونتيجة لذلك يسهل قراءة الكود ويبدو أنظف بكثير من ذي قبل.

تحديد أجزاء النص للمعالجة

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

$ sed "2s / test / another test /" myfile


معالجة سطر واحد فقط ، الرقم الذي يُعطى عند الاتصال بـ sed

الخيار الثاني هو مجموعة من السلاسل:

$ sed "2،3s / test / another test /" myfile


التعامل مع مجموعة من السلاسل

بالإضافة إلى ذلك ، يمكنك استدعاء الأمر replace بحيث تتم معالجة الملف من سطر معين إلى النهاية:

$ sed "2، $ s / test / another test /" myfile


معالجة ملف من السطر الثاني إلى النهاية

من أجل معالجة الأسطر التي تطابق الفلتر المحدد فقط باستخدام الأمر replace ، يجب تسمية الأمر على النحو التالي:

$ sed "/ likegeeks / s / bash / csh /" / etc / passwd
على غرار ما تمت مناقشته أعلاه ، يتم تمرير النمط قبل اسم الأمر s.


صفوف المعالجة مطابقة عامل التصفية

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

حذف الصفوف

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

يبدو استدعاء الأمر كما يلي:

$ sed "3d" myfile
نريد إزالة السطر الثالث من النص. لاحظ أن هذا ليس ملفًا. سيبقى الملف بدون تغيير ، وسيؤثر الحذف فقط على المخرجات التي سيولدها sed.


إزالة السطر الثالث

إذا لم تحدد رقم السطر المراد حذفه عند استدعاء الأمر d ، فسيتم حذف جميع الأسطر في الدفق.

فيما يلي كيفية تطبيق الأمر d على مجموعة من السلاسل النصية:

$ sed "2،3d" myfile


حذف مجموعة من الصفوف

وإليك كيفية حذف الأسطر بدءًا من السطر المحدد وحتى نهاية الملف:

$ sed "3، $ d" myfile


احذف الأسطر إلى نهاية الملف

يمكن أيضًا حذف الخطوط بالنمط:

$ sed "/ test / d" myfile


حذف الأسطر بالنمط

عند استدعاء d ، يمكنك تحديد نوعين من الأنماط - سيتم حذف الأسطر التي يوجد بها النمط وتلك الأسطر الموجودة بينهما:

$ sed "/ second /، / الرابعة / d" myfile


حذف مجموعة من الصفوف باستخدام القوالب

إدراج نص في دفق

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

صدى $ "اختبار آخر" | sed "i \\ First test"


الفريق الأول

الآن دعنا نلقي نظرة على الأمر أ:

صدى $ "اختبار آخر" | sed "a \\ First test"


الأمر أ

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

هنا سنساعد من خلال تحديد رقم الخط المرجعي في الدفق ، أو القالب. لاحظ أن معالجة السلاسل كنطاق لن تعمل هنا. دعنا نسمي الأمر i ، مع تحديد رقم السطر الذي نحتاج قبله لإدخال سطر جديد:

$ sed "2i \\ هذا هو السطر المدرج." ملفي


أنا أمر برقم الخط المرجعي

لنفعل الشيء نفسه مع الأمر:

$ sed "2a \\ هذا هو السطر الملحق." ملفي


أمر يحدد رقم الخط المرجعي

لاحظ الفرق بين الأمرين i و a. الأول يُدرج سطرًا جديدًا قبل السطر المحدد ، والثاني بعده.

استبدال السلاسل

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

$ sed "3c \\ هذا خط معدّل." ملفي


استبدال سلسلة كاملة

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

$ sed "/ هذا / c هذا سطر نص متغير." ملفي


استبدال السلاسل بالنمط

استبدال الشخصيات

يعمل الأمر y على الأحرف الفردية ، مع استبدالها وفقًا للبيانات التي تم تمريرها إليها عند استدعائها:

$ sed "y / 123/567 /" myfile


استبدال الشخصيات

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

عرض أرقام الأسطر

إذا استدعت sed باستخدام الأمر \u003d ، فستقوم الأداة المساعدة بطباعة أرقام الأسطر في دفق البيانات:

$ sed "\u003d" ملفي


عرض أرقام الأسطر

طبع محرر البث أرقام الأسطر أمام محتوياتها.

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

$ sed -n "/ test / \u003d" ملفي


عرض أرقام الأسطر المطابقة للنمط

قراءة البيانات لإدراجها من ملف

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

لنفكر في مثال:

ملفي $ sed "3r newfile"


إدراج محتوى الملف في الدفق

هنا تم إدراج محتوى الملف الجديد بعد السطر الثالث من ملفي.

إليك ما يحدث إذا قمت بتطبيق النمط عند استدعاء الأمر r:

$ sed "/ test / r newfile" myfile


استخدام قالب عند استدعاء الأمر r

سيتم إدراج محتوى الملف بعد كل سطر يطابق النمط.

مثال

لنتخيل المهمة التالية. يوجد ملف يحتوي على تسلسل معين من الأحرف ، في حد ذاته لا معنى له ، ويجب استبداله ببيانات مأخوذة من ملف آخر. وبالتحديد ، فليكن الملف الجديد ، حيث تلعب سلسلة من أحرف البيانات دور العنصر النائب. يتم تخزين البيانات التي سيتم استبدالها بالبيانات في البيانات.

يمكنك حل هذه المشكلة باستخدام الأمرين r و d لمحرر الدفق sed:

$ Sed "/ DATA\u003e / (r newfile d)" myfile


استبدال مؤشر المكان ببيانات حقيقية

كما ترى ، أضاف sed سطرين من ملف البيانات إلى المخرجات بدلاً من العنصر النائب DATA.

النتائج

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

هذا كل شيء لهذا اليوم. في المرة القادمة ، لنتحدث عن لغة معالجة البيانات awk.

القراء الأعزاء! هل تستخدم Sed في عملك اليومي؟ إذا كان الأمر كذلك، يرجى تجربتكم.


المؤلف: Rares Aioanei
تاريخ النشر: 19 نوفمبر 2011
ترجمة: A. Krivoshey
تاريخ التحويل: يوليو 2012

اختبر Nikolay Ignatushko جميع الأوامر المذكورة في هذه المقالة على إصدار GNU sed 4.2.1 في توزيعة Gentoo. لم تعمل كل النصوص بشكل جيد على نسخة GNU sed. ولكن كان الأمر يتعلق بالأشياء الصغيرة التي تم إصلاحها. فقط النص الخاص باستبدال التل بالجبال كان لا بد من تغييره بشكل كبير.

1 المقدمة

مرحبًا بكم في الجزء الثاني من سلسلتنا حول sed ، إصدار GNU. هناك العديد من إصدارات sed المتوفرة على منصات مختلفة ، لكننا سنركز على GNU sed 4.x. لقد سمع الكثير منكم عن sed أو استخدموه بالفعل كأداة بديلة. لكن هذا مجرد أحد استخدامات sed ، وسنحاول أن نظهر لك جميع جوانب استخدام sed. يرمز اسمها إلى "Stream EDitor" وكلمة "Stream" في هذه الحالة يمكن أن تعني ملفًا أو قناة أو ببساطة stdin. نأمل أن تكون لديك بالفعل معرفة أساسية بنظام Linux ، وإذا كنت قد عملت بالفعل باستخدام التعبيرات العادية ، أو على الأقل تعرف ما هي ، فسيكون كل شيء أسهل بالنسبة لك. لا يسمح لنا طول هذه المقالة بتضمين دليل كامل للتعبيرات العادية ؛ بدلاً من ذلك ، سنشرح المفاهيم الأساسية ونقدم عددًا كبيرًا من الأمثلة على استخدام sed.

2. التثبيت

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

$ sed - الإصدار

في نظامي ، يوضح هذا الأمر أن لدي GNU sed 4.2.1 مثبتًا بالإضافة إلى أنه يعطي رابطًا إلى الصفحة الرئيسية للبرنامج ومعلومات أخرى مفيدة. تسمى الحزمة "sed" بغض النظر عن التوزيع ، باستثناء Gentoo حيث تكون موجودة ضمنيًا.

3. المفاهيم

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

4. التعبيرات العادية

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

القط $ report.txt | sed "s / Nick / John / g"\u003e report_new.txt

Sed يستخدم stdout افتراضيًا ، يمكنك استخدام عامل إعادة توجيه الإخراج كما هو موضح في المثال أعلاه. هذا مثال بسيط للغاية ، لكننا أوضحنا بعض النقاط: نبحث عن كل التطابقات مع النمط "Nick" ونستبدل في جميع الحالات بـ "John". لاحظ أن sed يقوم بعمليات بحث حساسة لحالة الأحرف ، لذا كن حذرًا وتحقق من ملف الإخراج للتأكد من إجراء جميع عمليات الاستبدال. يمكن كتابة المثال أعلاه على النحو التالي:

$ sed "s / Nick / John / g" report.txt\u003e report_new.txt

حسنًا ، كما تقول ، ولكن أين التعابير النمطية هنا؟ نعم ، أردنا عرض مثال أولاً ، والآن يبدأ الجزء الممتع.
إذا لم تكن متأكدًا مما إذا كنت قد كتبت "Nick" أو "Nick" وترغب في استيعاب كليهما ، فيجب عليك استخدام الأمر sed "s / Nick | nick / John / g". للشريط الرأسي معنى يجب أن تعرفه إذا كنت قد درست لغة C ، أي أن تعبيرك سيتطابق مع "نيك" أو "نيك". كما سترى أدناه ، يمكن استخدام القناة بطرق أخرى ، لكن المعنى يظل كما هو. العوامل الأخرى الشائعة الاستخدام في التعبيرات العادية هي "؟" ، التي تطابق صفرًا أو تكرارًا واحدًا للحرف السابق (أي ، flavou؟ R سيتطابق مع النكهة والنكهة) ، "*" صفر أو أكثر من مرة ، "+" مرة واحدة أو أكثر مرات. يطابق "^" بداية السطر ، بينما يطابق "$" العكس. إذا كنت من مستخدمي vi أو vim ، فستبدو أشياء كثيرة مألوفة لك. بعد كل شيء ، هذه المرافق ، جنبًا إلى جنب مع awk و C ، لها جذورها في الأيام الأولى من نظام UNIX. لن نتحدث أكثر عن هذا الموضوع ، لأنه من الأسهل فهم معنى هذه الرموز بأمثلة ، ولكن يجب أن تعلم أن هناك تطبيقات مختلفة للتعبير العادي: POSIX و POSIX Extended و Perl بالإضافة إلى تطبيقات مختلفة لـ Fuzzy Regular عبارات تضمن لك صداع ...

5. أمثلة على استخدام sed

بناء جملة الأمر وصف

Sed "s / Nick / John / g" report.txt

يستبدل كل تكرار لـ Nick بـ John في report.txt

Sed "s / Nick \\ | nick / John / g" report.txt

يستبدل كل تكرارات لنيك أو نيك بجون.

Sed "s / ^ / /" file.txt\u003e file_new.txt

يضيف 8 مسافات إلى يسار النص لتحسين جودة الطباعة.

Sed -n "/ بالطبع / / انتباهك تدفع / p" myfile

يعرض كل الفقرات التي تبدأ بكلمة "بالطبع" وتنتهي بعبارة "الاهتمام الذي تدفعه".

Sed -n 12.18p file.txt

يطبع فقط الأسطر 12-18 من file.txt

Sed 12،18d file.txt

يخرج ملف file.txt بأكمله باستثناء الأسطر من 12 إلى 18
أدخل سطرًا فارغًا بعد كل سطر في file.txt

Sed -f script.sed file.txt

يكتب جميع الأوامر إلى script.sed وينفذها.

Sed "5! S / ham / cheese /" file.txt

يستبدل لحم الخنزير بالجبن في file.txt باستثناء السطر 5

Sed "$ d" file.txt

يزيل السطر الأخير

Sed -n "/ \\ (3 \\) / p" file.txt

يطبع سطورًا بثلاثة أرقام متتالية فقط

Sed "/ boom / s / aaa / bb /" file.txt

إذا تم العثور على "boom" ، فاستبدل aaa بـ bb

Sed "17 ، / disk / d" file.txt

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

صدى واحد اثنان | sed "s / one / unos / I"

يستبدل واحدًا بـ unos غير حساس لحالة الأحرف ، لذلك ستتم طباعة "unos TWO"

Sed "G؛ G" file.txt

أدخل سطرين فارغين بعد كل سطر في file.txt

Sed "s /.$//" file.txt

طريقة لاستبدال dos2unix :). بشكل عام ، يزيل الحرف الأخير من كل سطر.

Sed "s / ^ [\\ t] * //" file.txt

يزيل كل المسافات / علامات التبويب قبل كل سطر في file.txt

Sed "s / [\\ t] * $ //" file.txt

يزيل كل المسافات / علامات التبويب في نهاية كل سطر في file.txt

Sed "s / ^ [\\ t] * // ؛ s / [\\ t] * $ //" file.txt

يزيل كل المسافات / علامات التبويب في بداية ونهاية كل سطر في file.txt

Sed "s / foo / bar /" file.txt

يستبدل foo بالشريط فقط عند التواجد الأول للسطر.

Sed "s / foo / bar / 4" file.txt

يستبدل foo بالشريط فقط عند التكرار الرابع للسطر.

Sed "s / foo / bar / g" file.txt

يستبدل foo بالشريط لجميع تكرارات السلسلة.

Sed "/ baz / s / foo / bar / g" file.txt

استبدل foo بـ bar فقط إذا كانت السلسلة تحتوي على baz.

Sed "/./،/ ^$/!d" file.txt

ضغط كل الأسطر الفارغة المتتالية على سطر واحد. لا يوجد سطر فارغ في الأعلى.

Sed "/ ^ $ / N ؛ / \\ n $ / D" file.txt

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

Sed "/./،$!d" file.txt

قم بإزالة كافة الأسطر الفارغة البادئة

Sed -e: a -e "/ ^ \\ n * $ / ($ d؛ N؛)؛ / \\ n $ / ba" file.txt

قم بإزالة كافة الأسطر الفارغة اللاحقة

Sed -e: a -e "/ \\\\ $ / N ؛ s / \\\\\\ n / / ؛ ta" file.txt

إذا انتهى السطر ببلاش باكسبلاش ، فقم بربطه مع السطر التالي (مفيد لنصوص الصدفة)

Sed -n "/ regex /، + 5p" file.txt

تُخرج 5 أسطر بعد السطر الذي يحتوي على regex

Sed "1 ~ 3d" file.txt

احذف كل سطر ثالث بدءًا من الأول.

Sed -n "2 ~ 5p" file.txt

اطبع كل سطر خامس ، بدءًا من السطر الثاني.

Sed "s / ick / John / g" report.txt

طريقة أخرى لكتابة بعض الأمثلة المذكورة أعلاه. هل يمكنك اقتراح خاصتك؟

Sed -n "/ RE / (p ؛ q ؛)" file.txt

اطبع السلسلة مع مطابقة RE الأولى (التعبير العادي)

Sed "0، / RE / (// d؛)" file.txt

يزيل الخط مع المباراة الأولى

Sed "0 ، / RE / s // to_that /" file.txt

يغير المباراة الأولى فقط

Sed "s / ^ [^،] *، / 9999، /" file.csv

يستبدل جميع القيم في العمود الأول من ملف CSV بـ 9999

S / ^ * \\ (. * [^] \\) * $ / | \\ 1 | / ؛ s / "* ، * /" | / g ؛ : حلقة s / | * \\ ([^ "، |] [^، |] * \\) *، * / | \\ 1 | / g؛ s / | *، * / || / g؛ t حلقة s / * | / | / g ؛ s / | * / | / g؛ s / ^ | \\ (. * \\) | $ / \\ 1 / ؛

برنامج نصي sed لتحويل ملف CSV إلى ملف محدد بشُرط (يعمل فقط مع بعض أنواع CSV ، مع علامات اقتباس وفواصل).

Sed ": a؛ s / \\ (^ \\ | [^ 0-9.] \\) \\ (\\ + \\) \\ (\\ (3 \\) \\) / \\ 1 \\ 2، \\ 3 / g؛ ta" ملف .رسالة قصيرة

يغير تنسيق الأرقام في file.txt من 1234.56 إلى 1.234.56

Sed -r "s / \\<(reg|exp)+/\U&/g"

لتحويل أي كلمة تبدأ بـ reg أو exp إلى أحرف كبيرة.

Sed "1.20 s / Johnson / White / g" file.txt

استبدل جونسون بالأبيض في السطور من 1 إلى 20 فقط.

Sed ملف "1.20! S / Johnson / White / g" file.txt

المثال السابق هو العكس (يستبدل في كل مكان باستثناء الأسطر 1-20)

Sed "/ from / ، / حتى / (s / \\ & ltred \\\u003e / magenta / g؛ s / & ltblue \\\u003e / cyan / g؛)" file.txt

يستبدل فقط بين "من" و "حتى". في حالة وجود عدة نطاقات "من" - "حتى" ، يتم الاستبدال في كل منها.

Sed "/ ملاحظات نهائية: /، $ (s / Schaff / Herzog / g؛ s / Kraft / Ebbing / g؛)" file.txt

يستبدل فقط من كلمة "ENDNOTES:" إلى EOF

Sed "/./(H؛$!d؛)؛x؛/regex/!d" file.txt

اطبع فقرة فقط إذا كانت تحتوي على regex

Sed -e "/./(H؛$!d؛)" -e "x؛ / RE1 /! D؛ / RE2 /! D؛ / RE3 /! D" file.txt

يطبع الفقرات فقط إذا كانت تحتوي على RE1 و RE2 و RE3. لا يهم ترتيب RE1 و RE2 و RE3.

Sed "s / 14" / fourteen inches / g "file.txt

بهذه الطريقة يمكنك استخدام علامات الاقتباس المزدوجة

Sed "s / \\ / some \\ / UNIX \\ / path / \\ / a \\ / new \\ / path / g" file.txt

العمل مع مسارات Unix

Sed "s /// g" file.txt

يزيل كل الأحرف من a إلى g من file.txt

Sed "s / \\ (. * \\) Foo / \\ 1bar /" file.txt

يستبدل فقط المباراة الأخيرة من foo بالشريط

Sed "1! G؛ h؛ $! D"

استبدال أمر tac

Sed "/\\n/!G؛s/\\(.\\)\\(.*\\n\\)/&\\2\\1/؛//D؛s/.//"

استبدال الأمر rev

Sed 10q file.txt

استبدال قيادة الرأس

Sed -e: a -e "$ q؛ N؛ 11، $ D؛ ba" file.txt

استبدال أمر الذيل

Sed "$! N؛ / ^\\(.*\\)\\n\\1$/!P؛ D" file.txt

استبدال الأمر uniq

Sed "$! N؛ s / ^ \\ (. * \\) \\ N \\ 1 $ / \\ 1 /؛ t؛ D" file.txt

الأمر العكسي (ما يعادل uniq -d)

Sed "$! N؛ $! D" file.txt

يعادل الذيل -n 2

Sed -n "$ p" file.txt

... الذيل -n 1 (أو الذيل -1)

Sed "/ regexp /! D" file.txt

ما يعادل grep

Sed -n "/ regexp / (g؛ 1! P؛)؛ h" file.txt

يطبع السطر قبل المطابقة الأولى للتعبير العادي ، لكنه لا يتضمن المطابقة نفسها

Sed -n "/ regexp / (n ؛ p ؛)" file.txt

يطبع السطر بعد المطابقة الأولى للتعبير العادي ، لكنه لا يتضمن المطابقة نفسها

Sed "/ النمط / d" file.txt

يزيل خطوط مطابقة النقش

Sed "/./!d" file.txt

يزيل كل الأسطر الفارغة من الملف

Sed "/ ^ $ / N ؛ / \\ n $ / N ؛ // D" file.txt

تقليص كل الأسطر الفارغة المتتالية إلى سطرين فارغين. لم يتم تغيير الأسطر الفارغة المفردة.

Sed -n "/ ^$/(p؛h؛)؛/./(x؛/./p؛)" file.txt

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