في مناسبات معينة نحتاج إلى حذف سطر معين من ملف أو عدة ملفات ، على سبيل المثال ، حدث لي أن لدي قائمة كاملة من الملفات وأحتاج إلى حذف السطر رقم 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
تحياتي