في مناسبات معينة نحتاج إلى حذف سطر معين من ملف أو عدة ملفات ، على سبيل المثال ، حدث لي أن لدي قائمة كاملة من الملفات وأحتاج إلى حذف السطر رقم 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 😉
تحياتي
مساهمة جيدة جدا 😉
شكرا لك
بالمناسبة استلمنا ايميلك حالا سأجيب عليك 😀
تحياتي
بصفتي رئيسًا للمحطة الطرفية والخوادم واتصالات ssh ، أتيت إليك ، يا KZKG ^ Gaara الرائع ، وأسألك: أين يمكنني الحصول على برنامج تعليمي على مستوى جهلي يسمح لي باستخدام اتصالات ssh بين جهازين عن بُعد في شبكات مختلفة للمشاركة ملفات نصية ، pdf ، صورة وصوت (mp3)….
؟؟؟؟
على محمل الجد ، هل يمكنك إرشادي في هذا الصدد ، لدي جهازان ، أحدهما في العمل والآخر في المنزل وأحتاج إلى اتصال ssh بينهما (لأنني أفهم ذلك ، فإن ssh يسمح بمشاركة المحتوى بين الأجهزة ، هل أنا مخطئ؟).
وإذا كنت مخطئا ، ما هو التطبيق الذي تنصحني به؟
وأين أجد تعليميًا أساسيًا في هذا الصدد؟
scp
scp user @ machine_address: path user @ machine_address: path.
نفس صيغة cp ، المصدر -> الوجهة.
لقد ظهرت يا رجل ، لقد ضاعت.
نصيحة جيدة!
نصيحة مثيرة للاهتمام ... xD
بالصدفة أنك لا تعرف واحدًا يجعل النص الغامق بارزًا؟
أعني ، لدي ملف txt وهو عبارة عن قاموس ، يحتوي على أكثر من 10000 سطر وأريده أن يبرز نصًا معينًا قبل ":" نقاط التعليق والقيام بذلك واحدًا تلو الآخر كثيرًا جدًا.
مرحبا،
ملف txt هو نص عادي ، كما يوحي الاسم ... عادي ، بدون تنسيقات أو أي شيء مشابه ، أنا آسف ولكن لا أعتقد أن ما تطلبه يمكن القيام به ، أليس كذلك؟ 🙁
تحياتي
في الواقع يمكن ذلك ، ولكن عليك معرفة تنسيق الوجهة.
بي:
صدى $ (صدى "روبرت: مرحبًا. غيّر هنا" | sed 's / \ ./. \\ e [40؛ 31m /؛ s /: /: \\ e [40؛ 35m /')
إنها مسألة تدبير.
الطريقة الأخرى للحذف التي يمكن استخدامها هي sed '/' $ 1 '/ d' لكن عليك التأكد من re.
ثم إنهاء حفظه في * .odt
أليست هناك طريقة أسهل للقيام بذلك مع LibreOffice؟
هل يمكنك حذف جزء من السطر وترك الباقي؟
لنفترض أنني أريد حذف كل شيء أمام كلمة في صف معين.
أو احذف كل ما يلي هذه الكلمة.
نعم ، إنها مسألة سحب regex (إذا لزم الأمر man sed -r، –regexp-extension)
بدءا من ما أجده
صدى «روبرت: أهلا. التغيير هنا »| sed 's / Change //'
بنمط محدد جيدًا ومع. (حرف واحد) و * (أكثر من حرف)
ثم:
صدى «روبرت: أهلا. التغيير هنا »| sed 's / Change. * //'
قبل:
صدى «روبرت: أهلا. التغيير هنا »| sed 's /. * تغيير //'
إذا كان من المهم أن تظهر الكلمة
صدى «روبرت: أهلا. التغيير هنا »| sed 's / Change. * / Change /'
أو أكثر تفصيلاً
في السطر الذي يحتوي على روبرت ما بعد التغيير
صدى «فريتز: مرحبًا. التغيير هنا \ n روبرت: مرحبًا. التغيير هنا »| sed '/Robert/s/Cambio.*//'
أو ما شابه في البداية ، قم بإخراج السطر الثاني ومعالجة الباقي
صدى «فريتز: مرحبًا. التغيير هنا \ n روبرت: مرحبًا. التغيير هنا \ n أخرى »| sed -e 2d -e 's / Change. * //'
صدى «فريتز: مرحبًا. التغيير هنا \ n روبرت: مرحبًا. التغيير هنا \ n أخرى »| sed '2d؛ s / Change. * //'
شكرا ، انه مفيد جدا لي
مقال جميل ، يعجبني ، ما أعظم مسؤول النظام!
ماذا ستكون حياتنا بدون sed ، awek ، perl ، grep ، tail ، head ، "Emacs" والعديد من الأدوات الأساسية الأخرى!؟
شكرا ، لقد كان مفيدا جدا.
مرحبًا ، وكيف يمكنك حذف الأسطر 1,4،10 و XNUMX في نفس الأمر من ملف؟