كيفية حذف أسطر معينة من ملف باستخدام sed

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

لكن ، لنجرب ملفًا واحدًا بسيطًا إلى حد ما.

لدينا الملف توزيعات deb.txt الذي يحتوي على هذا:

ديبيان

كوبونتو

آرش لينكس

حل

نعناع

هذا هو الملف توزيعات deb.txt هو المكان الذي سنضع فيه التوزيعات القائمة على دبيان ، ولكن هناك نرى أنه في السطر رقم 3 هو "archlinux" ، وهو توزيعة من الواضح أنها لا علاقة لها بدبيان ، لذا يجب علينا حذف هذا السطر. لإزالة السطر رقم 3 من هذا الملف سنضع ما يلي:

sed "3d" distros-deb.txt > distros-deb-ok.txt

شرح هذا الخط سهل إلى حد ما ، مع العطش "ثلاثي الأبعاد" نشير إلى أننا سنحذف السطر رقم 3 مع توزيعات deb.txt نشير إلى الملف الذي يجب العمل عليه ، أي حذف السطر رقم 3 من هذا الملف ، حتى هنا إذا ضغطنا على Enter ، فسيظهر لنا ما نريد ولكن في المحطة ، لذلك باستخدام > توزيعات- deb-ok.txt نشير إلى أنه بدلاً من إظهار النتيجة في Terminal ، فإنها تضعها في ملف بهذا الاسم.

ما هو بسيط؟

أيضًا ، يمكننا تجنب استخدام ملف > توزيعات- deb-ok.txt باستخدام المعلمة المناسبة عطش، المعلمة -i

أي في حالة رغبتنا في إزالة السطر من الملف وحفظه بنفس الاسم (وليس في ملف آخر) ، ما عليك سوى إضافة المعلمة -i :

sed -i "3d" distros-deb.txt

سيؤدي هذا إلى إزالة السطر رقم 3 من distros-deb.txt وحفظه.

ماذا لو أردت نطاقًا من الخطوط ، أي إزالة السطر رقم 3 ولكن أيضًا رقم 4 ورقم 5؟ لتحقيق ذلك نضع النطاق من 3 إلى 5 ، أي:

sed -i "3,5d" distros-deb.txt

وسيظهر لي فقط دبيان وكوبونتو 

إذن ماذا لو أردت حذف السطر 2 إلى السطر الأخير ، عندما لا أعرف مجموع السطور؟

فقط استخدم رمز الدولار - »$

sed -i "2,$d" distros-deb.txt

في حال كنت تريد الحذف من السطر الأول إلى رقم 4 ، فإننا ببساطة نضع القيمة 1 في البداية:

sed -i "1,4d" distros-deb.txt

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

تحياتي


أضف كمصدر مفضل في جوجل