يتعين على كل مسؤول نظام التعامل مع ملفات النص العادي على أساس يومي. إن معرفة كيفية عرض أقسام معينة ، وكيفية استبدال الكلمات ، وكيفية تصفية المحتوى من تلك الملفات هي مهارات تحتاج إلى أن تكون في متناول يديك دون الحاجة إلى إجراء بحث على Google.
في هذه المقالة سنراجع sed ، محرر البث الشهير ، ونشارك 15 نصيحة لاستخدامه من أجل تحقيق الأهداف المذكورة سابقًا ، وأكثر من ذلك.
أدوات مثل الرأس والذيل تسمح لنا بعرض الجزء السفلي أو العلوي من الملف. ماذا لو احتجنا إلى عرض قسم في المنتصف؟ سوف يؤدي سطر sed التالي إلى إرجاع الخطوط 5 عبر 10 من myfile.txt:
# sed -n '5،10p' myfile.txt.
من ناحية أخرى ، من الممكن أن ترغب في طباعة الملف بأكمله باستثناء نطاق معين. لاستبعاد الأسطر 20 عبر 35 من myfile.txt، فعل:
# sed '20، 35d 'myfile.txt.
من المحتمل أنك مهتم بمجموعة من الخطوط غير المتتالية ، أو في أكثر من نطاق. دعونا نعرض الخطوط 5-7 و 10-13 من myfile.txt:
# sed -n -e '5،7p' -e '10، 13p 'myfile.txt.
كما ترى ، فإن -e
يسمح لنا الخيار بتنفيذ إجراء معين (في هذه الحالة ، طباعة الأسطر) لكل نطاق.
لاستبدال كل مثيل للكلمة إصدار
مع قصة
في myfile.txt، فعل:
# sed 's / version / story / g' myfile.txt.
بالإضافة إلى ذلك ، قد ترغب في التفكير في استخدام جي
بدلا من ز
لتجاهل حالة الأحرف:
# sed 's / version / story / gi' myfile.txt.
لاستبدال العديد من المساحات الفارغة بمسافة واحدة ، سنستخدم ناتج عرض طريق IP
وخط أنابيب:
# عرض مسار ip | سيد 's / * / / g'
قارن ناتج عرض طريق IP
مع وبدون خط الأنابيب:
إذا كنت مهتمًا باستبدال الكلمات داخل نطاق سطر فقط (30 عبر 40، على سبيل المثال) ، يمكنك القيام بما يلي:
# sed '30، 40 s / version / story / g 'myfile.txt.
بالطبع ، يمكنك الإشارة إلى سطر واحد من خلال الرقم المقابل بدلاً من النطاق.
في بعض الأحيان يتم تحميل ملفات التكوين مع التعليقات. على الرغم من أن هذا مفيد بالتأكيد ، فقد يكون من المفيد عرض توجيهات التكوين فقط في بعض الأحيان إذا كنت تريد عرضها جميعًا في لمحة.
لإزالة الخطوط الفارغة أو تلك التي تبدأ بـ #
من ملف تكوين Apache ، قم بما يلي:
# sed '/ ^ # \ | ^ $ \ | * # / d 'httpd.conf.
علامة الإقحام متبوعة بعلامة الرقم (^#)
يشير إلى بداية السطر ، بينما ^$
يمثل أسطر فارغة. تشير الأعمدة الرأسية إلى عمليات منطقية ، بينما تُستخدم الشرطة المائلة للخلف للهروب من الأعمدة الرأسية.
في هذه الحالة بالذات ، يحتوي ملف تكوين Apache على أسطر بـ #'س
ليس في بداية بعض السطور ، لذلك *#
يتم استخدامه لإزالة تلك أيضًا.
لاستبدال كلمة تبدأ بأحرف كبيرة أو صغيرة بكلمة أخرى ، يمكننا أيضًا استخدام sed. للتوضيح ، دعنا نستبدل الكلمة أزيز أو أزيز مع rar في myfile.txt:
# sed 's / [Zz] ip / rar / g' myfile.txt.
لا تفوت:استخدم Awk مع التعبيرات العادية لتصفية النص في الملفات
استخدام آخر لـ سيد تتمثل في طباعة الأسطر من ملف يطابق تعبيرًا عاديًا معينًا. على سبيل المثال ، قد نكون مهتمين بمشاهدة أنشطة التفويض والمصادقة التي حدثت في 2 يوليو، وفقا ل /var/log/secure تسجيل الدخول أ CentOS 7 الخادم.
في هذه الحالة ، النمط المطلوب البحث عنه هو 2 يوليو في بداية كل سطر:
# sed -n '/ ^ Jul 1 / p' / var / log / secure.
مع سيد، يمكننا أيضًا إدخال مسافات (أسطر فارغة) لكل سطر غير فارغ في الملف. لإدراج سطر فارغ كل سطر آخر رخصة، ملف نصي عادي ، قم بما يلي:
# sed G myfile.txt.
لإدراج سطرين فارغين ، قم بما يلي:
# sed 'G؛ G 'myfile.txt.
إضافة الأحرف الكبيرة G مفصولة بفاصلة منقوطة إذا كنت تريد إضافة المزيد من الأسطر الفارغة. توضح الصورة التالية المثال الموضح في هذه النصيحة:
قد يكون هذا التلميح مفيدًا إذا كنت تريد فحص ملف تكوين كبير. سيؤدي إدخال مساحة فارغة كل سطر آخر وتوصيل الإخراج إلى أقل إلى تجربة قراءة أكثر سهولة.
ال دوس 2 يونيكس يقوم البرنامج بتحويل ملفات النص العادي من تنسيق Windows / Mac إلى Unix / Linux ، وإزالة أحرف السطر الجديد المخفية التي أدخلتها بعض برامج تحرير النصوص المستخدمة في تلك الأنظمة الأساسية. إذا لم يكن مثبتًا في نظام Linux لديك ، فيمكنك محاكاة وظائفه باستخدام ملفات سيد بدلا من تثبيته.
في الصورة على اليسار يمكننا رؤية عدة أحرف سطر جديد في DOS (^ م)
، والتي تمت إزالتها لاحقًا باستخدام:
# sed -i 's / \ r //' myfile.txt.
يرجى ملاحظة أن -أنا
الخيار يشير إلى التحرير في المكان. ثم لن يتم إرجاع التغييرات إلى الشاشة ، ولكن سيتم حفظها في الملف.
ملحوظة: يمكنك إدراج أحرف سطر جديد DOS أثناء تحرير ملف في محرر vim مع السيطرة + V.
و السيطرة + M.
.
في النصيحة السابقة استخدمناها سيد لتعديل ملف ولكن لم يتم حفظ الملف الأصلي. في بعض الأحيان يكون من الجيد حفظ نسخة احتياطية من الملف الأصلي تحسبًا لذلك.
للقيام بذلك ، أشر إلى لاحقة تلي -أنا
الخيار (داخل علامات الاقتباس المفردة) لاستخدامه لإعادة تسمية الملف الأصلي.
في المثال التالي سنحل محل جميع حالات هذه أو هذه (تجاهل الحالة) مع ذلك في myfile.txt، وسوف نقوم بحفظ الملف الأصلي بصيغة myfile.txt.orig.
أخيرًا ، سوف نستخدم فائدة فرق لتحديد الاختلافات بين كلا الملفين:
# sed -i'.orig 's / this / that / gi' myfile.txt.
لنفترض أن لديك ملفًا يحتوي على أسماء كاملة بالتنسيق الاسم الاول, الكنية. لمعالجة الملف بشكل مناسب ، قد ترغب في التبديل الكنية و الاسم الاول.
يمكننا فعل ذلك مع سيد الخرافة اسهل:
# sed 's / ^ \ (. * \)، \ (. * \) $ / \، / g' names.txt.
في الصورة أعلاه ، يمكننا أن نرى أن الأقواس ، لكونها رموزًا خاصة ، تحتاج إلى الهروب ، وكذلك الأرقام 1 و 2.
تمثل هذه الأرقام التعبيرات النمطية المميزة (التي يجب أن تظهر داخل الأقواس):
يشار إلى الإخراج المطلوب بالتنسيق SecondColumn (الكنية) + فاصلة + الفراغ + العمود الأول (الاسم الاول). لا تتردد في تغييره إلى ما تريد.
في بعض الأحيان ، فإن استبدال جميع حالات كلمة معينة ، أو عدد قليل من الكلمات العشوائية ، ليس بالضبط ما نحتاجه. ربما نحتاج إلى إجراء الاستبدال إذا تم العثور على تطابق منفصل.
على سبيل المثال ، قد نرغب في استبدال بداية مع توقف فقط إذا تم العثور على خدمات الكلمات في نفس السطر. في هذا السيناريو ، إليك ما سيحدث:
نحتاج إلى بدء الاحتفال في العمل ، ولكن لنتذكر بدء جميع الخدمات أولاً.
في السطر الأول ، بداية لن يتم استبداله بـ توقف لأن كلمة خدمات لا تظهر في هذا السطر ، على عكس السطر الثاني.
# sed '/ services / s / start / stop / g' msg.txt.
يمكنك الجمع بين استبداليين أو أكثر بمفردها سيد قيادة. دعنا نستبدل الكلمات التي والسطر فيها myfile.txt مع هذه الآية على التوالي.
لاحظ كيف يمكن القيام بذلك باستخدام عادي سيد أمر استبدال متبوعًا بفاصلة منقوطة وأمر استبدال ثانٍ:
# sed -i 's / that / this / gi؛ s / line / verse / gi 'myfile.txt.
هذه النصيحة موضحة في الصورة التالية:
بالطبع بكل تأكيد، سيد يمكن دمجها مع أدوات أخرى من أجل إنشاء أوامر أكثر قوة. على سبيل المثال ، دعنا نستخدم المثال الوارد في نصيحة رقم 4 واستخرج عنوان IP الخاص بنا من إخراج ملف طريق الملكية الفكرية
قيادة.
سنبدأ بطباعة السطر الذي توجد فيه الكلمة فقط src
يكون. ثم سنحول مسافات متعددة إلى مسافات واحدة. أخيرًا ، سنقطع ملف 9 حقل (مع الأخذ في الاعتبار مسافة واحدة كفاصل مجال) ، حيث يكون عنوان IP:
# عرض مسار ip | sed -n '/ src / p' | sed -e 's / * / / g' | قطع -d "-f9.
توضح الصورة أدناه كل خطوة من الأمر أعلاه:
شاركنا في هذا الدليل 15 نصائح وحيل سيد لمساعدتك في مهام إدارة النظام اليومية. هل هناك أي نصيحة أخرى تستخدمها بشكل منتظم وترغب في مشاركتها معنا ومع باقي المجتمع؟
إذا كان الأمر كذلك ، فلا تتردد في إخبارنا باستخدام نموذج التعليقات أدناه. نرحب أيضًا بالأسئلة والتعليقات - نتطلع إلى الاستماع منك!
لا تفوت:إتقان أوامر Linux "Awk" باستخدام النصائح والحيل