معالجة النصوص على RedHat Enterprise Linux: تحريرها بـ Nano و Vim والبحث فيها بـ grep


محمد أحمد العيل

يعدّ التعامل مع الملفات النصيّة من المهامّ المتكرّرة التي على مدير النّظُم تنفيذها. تشمل هذه المهمّة التّعديل على الملفّات الموجودة (ملفات إعداد غالبا) أو إنشاء ملفّات جديدة. سنقدّم في هذا الدّرس البرنامجيْن الأكثر استخداما لتحرير الملفات النصيّة على RHEL (وتوزيعات لينكس عموما)؛ وهما Nano و Vim. يشتهر Nano بسهولة استخدامه، خصوصا بالنسبة للمبتدئين؛ فيما يتميّز Vim بإضافاته الفعّالة التي تجعل منه أكثر من مجرّد محرّر نصوص. لن ندخل في شرح المحرّر الذي يجب عليك اختيّاره؛ جرّب ثم اختر ما يناسبك.

file-editors-vim-nano-redhat.png

استخدام Nano لتحرير الملفات النصية

يُستخدَم أمر nano لبدء تشغيل محرّر النصوص Nano. يمكن فتح ملفّ بتمرير مساره إلى الأمر؛ سيظهر محتوى الملفّ في هذا الحالة داخل المحرّر. إن لم يكن الملفّ موجودا فسيُنشئ المحرّر ملفا فارغا بنفس الاسم ويفتحه إلا أنه لن يُخزَّن إلا إذا طلبت ذلك من المحرّر (سنرى كيف في ما بعد). إن استُخدِم الأمر دون معطيات فسيظهر المحرّر بمحتوى فارغ.

01_nano_editor.png

يظهر في أعلى المحرّر إلى اليسار رقم الإصدار وفي الوسط اسم الملفّ المفتوح أو صوان Buffer جديد (تخزين مؤقّت) إن نُفِّذ الأمر دون تمرير معطى. ثم تأتي منطقة تحرير النّص (بيضاء في الصّورة) وفي الأسفل أدوات للتحكّم. تظهر أدوات التحكّم على هيئة حرف تسبقه علامة ^ التي تشير إلى زرّ Ctrl في لوحة المفاتيح؛ أي أنه يجب الضّغط على زرّ Ctrl والحرف المشار إليه من أجل استعمال أداة التحكّم.

أهم أدوات التحكم هي التالية:

  • Ctrl+G: تظهر صفحة المساعدة.
  • Ctrl+X: تخرُج من المحرّر.
  • Ctrl+O: تخزّن محتوى الملفّ.
  • Ctrl+J: تسويّة محاذاة النّص.
  • Ctrl+R: إدراج محتوى ملفّ بذكر مساره الكامل (المُطلَق) في الملفّ الحالي.
  • Ctrl+W: البحث داخل الملفّ.
  • Ctrl + K: يقصّ السطر الحالي.
  • Ctrl + U: يُلصق المحتوى المقصوص.
  • Ctrl + C: يُظهر وضعيّة المؤشر (السطر والعمود). إن طلبت من المحرّر عملية مثل الحفظ وأردت إلغاءها يمكن أيضا استخدام هذا الاختصار.
  • يُستخدم الاختصاران Ctrl+F و Ctrl+B على التوالي لتقديم المؤشّر أو إرجاعه بحرف.
  • يُستخدم الاختصاران Ctrl+P و Ctrl+N على التوالي للانتقال إلى الأعلى أو الأسفل؛ سطرا في كل مرة.
  • يُستخدم الاختصاران Ctrl+space وAlt+space على التوالي لتقديم المؤشّر أو إرجاعه بكلمة.
  • Ctrl + _: الانتقال إلى سطر وعمود تحدّدهما بالصّيغة X,Y حيث X رقم السّطر وY رقم العمود.

استخدام Vim لتحرير الملفات النصية

محرّر Vim هو نسخة محسَّنة من محرّر Vi؛ وهو محرّر نصوص مشهور الأنظمة الشبيهة بيونكس. يتميّز محرّر Vim بعمله حسب أوضاع Modes مختلفة:

  • وضع الأوامر: يُستخدَم لتصفّح الملف وتنفيذ أوامر عليه. تتكوّن الأوامر من حرف أو أكثر وهي حسّاسة لحالة الأحرف Case-sensitive. إن أردت إعادة تنفيذ أحد الأوامر عدّة مرات فيمكنك كتابة عدد المرات قبله (توجد بضعة استثناءات لهذه القاعدة). مثلا؛ ينسخ الأمرُ yy (أو Y) كامل السّطر الحالي وعند كتابة العدد 4 أمامه كالتالي 4yy (أو 4Y) فإنه ينسخ السّطر الحالي إضافة للأسطر الثلاثة الموالية (4 أسطر في المجموع).
  • وضع ex: يمكن في هذا الوضع تطبيق أوامر محرّر ex (محرّر نصوص يعمل على أنظمة يونكس) لتنفيذ عمليّات مثل حفظ الملفّ الحالي أو تنفيذ برنامج أو أمر خارجي. اضغط على زر Exc ثم أدخل نقطتين عموديّتيْن : إن أردت الوصول إلى وضع ex من وضع الأوامر؛ ثم اكتب بعدهما أمر ex الذي تودّ تنفيذه.
  • وضع الإدخال : يُستخدم زر i للانتقال من وضع الأوامر إلى وضع الإدخال (كتابة نصّ). ينتج عن الضّغط على أزرار في لوحة المفاتيح أثناء وضع الإدخال ظهور النّص في المحرّر.
  • تمكن دائما العودة إلى وضع الأوامر، مهما كان الوضع الذي توجد فيه، بالضّغط على زرّ Esc.

نشغّل محرّر النصوص Vim بتنفيذ الأمر vim في سطر الأوامر. يكون المحرّر عند بدء تشغيله على وضع الأوامر.

ننفّذ الأمر help: للحصول على المساعدة (لا تنس الضغط على زر Enter بعد كتابة الأمر ليُنفَّذ). يبدو المحرّر كالتالي بعد تنفيذ الأمر السابق.

02_vim_editor_help.png

تُقدّم صفحة المساعدة في الأعلى فهرسا بمحتوياتها على هيئة مقاطع مخصّصة حسب المواضيع. انتقل إلى الموضوع الذي ترغب في عرض معلومات عنه باستخدام الأسهم على لوحة المفاتيح ثم عند الوصول إلى اسم الموضوع في الفهرس اضغط على الزّريْن [+Ctrl لعرض محتويات المقطع المخصَّص للموضوع. يظهر في أسفل الشاشة اسم الملفّ الحالي.

  • إن أردت إغلاق الملف دون حفظ التعديلات نفّذ الأمر التالي:
    :q!

    يُستخدَم نفس الأمر أيضا للخروج من صفحة المساعدة.

  • استخدم أحد الأوامر التاليّة لحفظ التعديلات على ملفّ:

    :wq!
    :x!
    ZZ

    لاحظ ألا وجود للنقطتيْن في الأمر الأخير (ZZ).

  • استخدم الأمر Ndd أثناء وضع الأوامر لقصّ عدد N من الأسطر، ابتداءً من السّطر الحالي.
  • استخدم الأمر Myy أثناء وضع الأوامر لنسخ عدد M من الأسطر، ابتداءً من السّطر الحالي.
  • استخدم الأمر p للصق الأسطُر التي نسختها أو قصصتها سابقا.
  • يُستخدَم الأمر r: إن أردت إدراج محتوى ملف في الملفّ الحالي. إن أردنا مثلا إدراج محتوى الملف etc/fstab/ في الملف الحالي ننفّذ الأمر كالتالي:

    :r /etc/fstab

    يمكن أيضا إدراج نتيجة تنفيذ أمر من أوامر النّظام كالتالي:

:r! command

مثلا؛ لإضافة التاريخ والوقت في مكان المؤشّر نكتب:

:r! date

استخدام أمر grep والتعابير النمطية Regular expressions

يعد البحث في الملفات النصيّة من الأمور الاعتياديّة لأي مدير أنظمة. يكثُر استخدام أمر grep مع التعابير النمطيّة لهذا الغرض.

التعابير النمطيّة (تُعرَف بـ regexأو regexp) هي طريقة للتعرّف على سلسلة محارف تتبع نمطا (صيغة أو هيئة) تُحدَّد بعبارة. سنعرض في ما يلي لأمثلة قاعديّة في التعامل مع التعابير النمطيّة؛ راجع مقال مقدمة في التعابير النمطية لتفاصيل أكثر.

  • نفرض مثلا أنك تريد التأكد من دعم معالجك للحوسبة الافتراضيّة Virtualization. يعني وجود سلسلة المحارف svmأو vmx في الملفّ proc/cpuinfo/ أن المعالج يدعم التقنيّة المذكورة. نستخدم أمر grep كما يلي للبحث في الملف:

    $ grep -i 'svm\|vmx' /proc/cpuinfo

    تُستخدم العصى العموديّة | (تشير إلى العامل أو Or) للبحث عن توجد إحدى العبارتين svm أو vmx. يجب تخليص Escape العامل بـ\ وإلا فإن أمر grep سيتعامل معه كمحرف عادي لا دلالة له وليس بوصفه عاملا. يطلُب الخيار i- من الأمر ألا يعتدّ بحالة الأحرف (كبيرة أو صغيرة).

يمكن باستخدام الخيّار E- تجاوز الحاجة لتخليص العوامل؛ ما يجعل الأمر يفسّرها مباشرة؛ يُكتَب الأمر السابق مثلا:

$ grep -Ei 'svm|vmx' /proc/cpuinfo
  • يمكن أن يكون التعبير النمطي عبارة عن مجال من خيارات توضَع بين معكوفين مربعين [].

يُقرأ التعبير النمطي c[aeiou]t مثلا: حرف c، يتبعه واحد من الأحرف التالية aeiou ثم حرف t. تُطابق الكلمات التاليّة هذا التعبير النمطي: cat، cet، cot، cit وcut. يمكن أيضا وضع مجال من الأحرف أو الأرقام بين المعكوفين؛ على سبيل المثال [a-z] و[0-9] يوافقان على التوالي أي حرف أبجدية لاتيني صغير Lowercase والأرقام من 0 إلى 9. إن أردنا الإشارة إلى أن الحرف يمكن أن يتكرّر نضع عدد مرات التكرار بين معكوفين {X} بعد العبارة.

يستخرج الأمر التالي معرّف جهاز التخزين من الملفّ etc/fstab/:

$ grep -Ei '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' -o /etc/fstab

نأخذ الجزء الأول من العبارة:

[0-9a-f]{8}-

بمكن فهم الجزء كالتالي: لدينا ثماني خانات تتبعها خانة تاسعة توجد بها عارضة -. بالنسبة للخانات الثمانيّة فقيمة كل واحدة يمكن أن تكون إما رقما من بين الأرقام 0 إلى9 أو حرفا من بين الأحرف a إلى f.
ينطبق نفس المبدأ على بقيّة أجزاء العبارة. يشير العدد بين معكوفين بعد الأقواس إلى أن عدد مرات تكرار الجزء الموجود بينها.
في المحصّلة: يمكن تقسيم العبارة إلى ثلاثة أجزاء:

[0-9a-f]{8}-
([0-9a-f]{4}-){3}
[0-9a-f]{12}

يتشابه الجزء الأول والأخير (الثالث) مع فرق ألا وجود لعارضة في الجزء الأخير وكونه مكونا من 12 محرفا؛ بدلا من 8 قبل العارضة في الجزء الأول. أما الجزء الثاني فهو مكوّن من ثلاثة أجزاء؛ وتمكن إعادة كتابته كالتالي:

[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-

يطلُب الخيار o- من الأمر طباعة جزء الملف المطابق للعبارة دون غيره.

الأنماط المعرَّفة مسبقا

توجد تعابير نمطيّة معرّفة مسبقا؛ وفي ما يلي أهمها:

النمط                      المعنى
[[:alnum:]] جميع الحروف اللاتينية (الصغيرة والكبيرة) إضافة للأرقام من 0 إلى 9
[[:alpha:]] أي حرف لاتيني، صغيرا كان أم كبيرا
[[:blank:]] مسافة أو علامة الجدولة Tabulation
[[:digit:]] أي رقم من 0 إلى 9
[[:lower:]] أي حرف لاتيني صغير
[[:space:]] مساحة
[[:punct:]] علامات التنقيط
[[:upper:]] أي حرف لاتيني كبير
[:word:] جميع الأحرف اللاتينية، الأرقام من 0 إلى 9 أو عارضة سفليّة _ Underscore

يطبع الأمر التالي جميع أسطر الملفّ etc/passwd/التي تحوي سلسلة من أربعة أرقام: 

$ grep -Ei [[:digit:]]{4} /etc/passwd

ترجمة -وبتصرّف- للمقال RHCSA Series: Editing Text Files with Nano and Vim / Analyzing text with grep and regexps – Part 4 لصاحبه Gabriel Cánepa.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن