أوامر Linux ومهارات Shell
sed: تحرير التدفقات دون فتح محرر
التحرير الجانبي: تدفقات كاملة من النص تمر عبره، وتخرج متحولة، ولا يفتح أي محرر. تأتي سمعتها من -i، الذي يحول استبدال سطر واحد إلى عملية مجمعة عبر آلاف الملفات، ومن القصص الكارثية للمسؤولين الذين قاموا بتشغيلها بدون لاحقة احتياطية. سير العمل الآمن لا يتغير أبدًا: قم بتشغيل الاستبدال بشكل مرئي، وأكد الإخراج، ثم أضف -i مع لاحقة واحتفظ برمز الخروج.
النقاط الرئيسية
- المعاينة قبل الالتزام: يُظهر ملف sed -n '10,20p' نطاقًا من الخطوط، ونفس المجموعة -n plus p تطبع فقط الأسطر التي تطابق التعبير العادي أو العنوان.
- استبدل بالأعلام التي تفعل ما تعنيه: s/old/new/g لجميع التطابقات، ورقم مثل 2g للثانية فقط، و-E للتعبير العادي الممتد بدون صفحة هروب من الشرطة المائلة العكسية.
- تحصل التعديلات الموضعية على لاحقة، بدون استثناءات: يحتفظ تطبيق sed -i.bak 's/http:/https:/g' بنسخة احتياطية بنفس الاسم بجوار كل تغيير؛ لقد أنقذت هذه اللاحقة عمليات نشر أكثر من أي سجل تراجع لأي محرر.
- المحددات مجانية: s|/var/www|/srv/app|g (أو s#...#g) يتجنب معارك الهروب من الشرطة المائلة عندما يكون النمط الخاص بك مليئًا بالمسارات.
- -i ليس ذريًا: تعطل أو مجموعة regex سيئة في منتصف الدفعة بمجرد ترك ملفات نصف تمت إعادة كتابتها، لذلك يتم تشغيل المهام المجمعة ضد النسخ أو الأشجار التي يتم تتبعها بواسطة git، وليس النسخة الوحيدة أبدًا.
- يختلف GNU وBSD sed على -i: يتطلب BSD اللاحقة قبل البرنامج النصي (sed -i '' يعمل على نظام التشغيل macOS، وليس بناء جملة Linux)، وهذا سبب آخر لتجنب البرامج النصية القابلة للنقل -i تمامًا.
- الحذف والعزل أفعال صادقة: 'd' يزيل الأسطر المطابقة (sed '/^#/d' يزيل التعليقات)، و-n مع نطاق يعزل القسم؛ كلاهما يقرأ بشكل أفضل من البدائل الذكية.
- أي شيء يتجاوز تعديلات السطر الواحد، أو الكتل الحرفية متعددة الأسطر، أو الصلات ذات الحالة ينتمي إلى برنامج نصي حقيقي أو awk؛ إن إجبار sed على القيام بعمل مبرمج هو السبب وراء ظهور سطور غير قابلة للقراءة.
ملاحظة ميدانية
أول sed -i بدون اللاحقة .bak وصل إلى تكوين nginx للإنتاج مباشرة قبل ذروة حركة المرور بعد الظهر. منذ ذلك الحين، يحمل كل تعديل موضعي لاحقة احتياطية، وأقرأ مخرجات التشغيل الجاف قبل أن يقترب -i من الأمر.
أسئلة شائعة
كيف يمكنني تحرير الأسطر التي تتطابق مع شيء آخر فقط؟
قم بمخاطبتهم: sed '/cache/s/true/false/' يقلب الصواب إلى الخطأ فقط في خطوط ذاكرة التخزين المؤقت، ويتراوح نطاقات مثل '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g' لتحرير النطاق إلى الكتل؛ العنوان يذهب أولا، الأمر ثانيا.
لماذا لا يتطابق sed مع نهايات الأسطر في ملف تم تحريره بواسطة Windows؟
تنتهي هذه الأسطر بأحرف إرجاع لا تتوقعها نقاط الارتساء '$'؛ قم بتجريدها باستخدام tr أولاً أو تطبيعها في الطريق، ولا يزال المحتوى متعدد الأسطر ينتمي إلى awk أو Perl مع -0777.
هل sed أسرع من awk بالنسبة للبدائل البسيطة؟
بشكل هامشي وغير ذي صلة؛ كلاهما ينتهي بالمللي ثانية على ملفات بحجم التكوين. اختر حسب سهولة القراءة، لأنه يجب على زميلك أن يفك سطرًا واحدًا من سطورك خلال ستة أشهر.
هل يمكنني إدراج كتل التكوين بأكملها باستخدام sed؟
نعم: يُلحق "a" بعده، ويُدرج "i" قبله، ويستبدل "c" السطر، لكن اجعل النص المدرج بسيطًا وذو غرض واحد؛ تنتمي الكتل الحقيقية إلى ملف قالب أو خطوة توفير مناسبة.
كيف تساعدك Kinetikatech في أوامر linux ومهارات shell
هذا ما نقوم به كل يوم: الأوامر وعادات البرمجة النصية التي تحدد ما إذا كان المسؤول يشغل الخادم أم يحاربه: البحث عن النصوص والعمليات وتحويلها ونقلها والإشراف عليها باستخدام الأدوات الموجودة في كل تثبيت أساسي. تغطي خدمة أمن خوادم لينكس و إدارة الخوادم ذلك من البداية إلى النهاية: التقييم والتنفيذ والمراقبة على مدار الساعة والاستجابة للطوارئ خلال 30 دقيقة.