الإعلانات

اثنان من أكثر أدوات لينكس المساعدة التي لا تحظى بالتقدير الإجرامي هما Sed و Awk. على الرغم من أنها قد تبدو غامضة بعض الشيء ، إذا كان عليك في أي وقت إجراء تغييرات متكررة على أجزاء كبيرة من التعليمات البرمجية أو النصوص ، أو إذا كان لديك أي وقت مضى لتحليل بعض النصوص ، فإن Sed و Awk لا تقدر بثمن.

لذا ، ما هي؟ كيف يتم استخدامها؟ وكيف ، عند دمجهما معًا ، هل يسهلان معالجة النص؟

ما هو Sed؟

سيد تم تطويره في عام 1971 في مختبرات بيل، من قبل رائد الحوسبة الأسطوري لي إي. مكماهون.

الاسم يرمز محرر دفقوهذا ما يفعله. يسمح لك بتحرير نصوص أو تيارات النص برمجيا، من خلال لغة برمجة مدمجة وبسيطة ، لكنها كاملة.

الطريقة التي يعمل بها بسيطة: فهو يقرأ النص ، سطرًا بسطر في المخزن المؤقت. بالنسبة لكل سطر ، سيتم تنفيذ الإرشادات المحددة مسبقًا ، حيثما ينطبق ذلك.

على سبيل المثال ، إذا قام شخص ما بكتابة نص برمجي Sed يستبدل كلمة "بيرة" بكلمة "صودا" ، ثم يمر في ملف نصي يحتوي كلمات "99 زجاجة من البيرة على الحائط" ، ستقوم بمراجعة هذا الملف على أساس كل سطر على حدة ، وطباعة "99 زجاجة من الصودا على الحائط" ، وهكذا على.

أبسط سيناريو Sed هو Hello World. هنا ، نستخدم الأداة المساعدة Unix Echo ، التي تقوم فقط بإخراج السلاسل ، لطباعة "Hello World". لكننا نوجه هذا إلى Sed ، ونطلب منه استبدال "World" بـ "Dave". الاشياء التفسيرية الذاتية.

instagram viewer

صدى "Hello World" | سيد ق / العالم / ديف
صدوق ديف

يمكنك أيضًا دمج تعليمات Sed في الملفات ، إذا كنت بحاجة إلى إجراء بعض التعديلات الأكثر تعقيدًا. مستوحاة من هذا الموضوع فرحان ريديت، سآخذ الكلمات إلى A-Ha’s خذني، واستبدل كل مثيل لـ "I" و "Me" و "My" بـ Greg.

أولاً ، سأضع كلمات الأغنية في ملف نصي يسمى tom.txt. ثم سأفتح محرر النصوص المفضل لدي (my المفضلة فيم أهم 7 أسباب لإعطاء محرر نص Vim فرصةلسنوات ، جربت محرر نص واحد تلو الآخر. سمها ، حاولت ذلك. لقد استخدمت كل واحد من هؤلاء المحررين لأكثر من شهرين كمحرر يومي الأساسي. بطريقة ما ، أنا ... اقرأ أكثر ، لكن نانو نانو مقابل vim: مقارنة محرري نص المحطة الطرفيةعلى الرغم من أن لينكس أصبح سهلاً بما يكفي ليستخدمه أي شخص دون الحاجة إلى استخدام Terminal ، إلا أن البعض منا يستخدمه بانتظام أو يتشوقون لمعرفة كيف يمكن للمرء التحكم ... اقرأ أكثر و جيديت gedit: أحد أكثر محرري النصوص العادية المليئة بالميزات [Linux و Windows]عندما تفكر في محررات النص العادي ، فإن أول شيء قد يبرز في رأسك هو تطبيق Windows Notepad. يفعل بالضبط ما ينص عليه وصف وظيفته - ميزات بسيطة لنص عادي ... اقرأ أكثر كلاهما خيارات ممتازة) ، وإضافة الأسطر التالية. تأكد من انتهاء الملف الذي تقوم بإنشائه .sed.

سيد-جريج-سيد

قد تلاحظ أنه في المثال أعلاه ، كررت نفسي (مثل s / me / Greg / و s / Me / Greg /). ذلك لأن بعض إصدارات Sed ، مثل تلك التي تأتي مع Mac OS X ، تفعل ذلك ليس دعم المطابقة غير الحساسة لحالة الأحرف. نتيجة لذلك ، يجب أن نكتب تعليمتين Sed لكل كلمة ، حتى تتعرف على النسخة المكتوبة بالأحرف الكبيرة وغير الرأسمالية.

لن يعمل هذا بشكل مثالي ، كما لو كنت قد استبدلت كل مثيل من "أنا" و "أنا" و "My" يدويًا. تذكر أننا نستخدم هذا فقط كتمرين لشرح كيفية تجميع تعليمات Sed في برنامج نصي واحد ، ثم تنفيذها باستخدام أمر واحد.

ثم نحتاج إلى استدعاء الملف. للقيام بذلك ، نقوم بتشغيل هذا الأمر.

القط tom.txt | sed -f greg.sed

دعونا نبطئ ونلقي نظرة على ما يفعله ذلك. سوف يلاحظ القراء ذو ​​العيون النسر ما نحن عليه ليس باستخدام الصدى هنا. نحن نستخدم Cat. وذلك لأنه بينما تطبع Cat محتويات الملف بالكامل ، فإن الصدى سيطبع فقط اسم الملف. ستلاحظ أيضًا أننا نركض Sed بعلامة "-f". هذا يخبرها بفتح البرنامج النصي كملف.

النتيجة النهائية هي هذه.

سين-جريج-سيناريو

من الجدير بالذكر أيضًا أن Sed يدعم التعبيرات العادية (REGEX). تتيح لك هذه تحديد الأنماط في النص ، باستخدام بناء جملة خاص ومعقد.

إليك مثال على كيفية عمل ذلك. سنأخذ كلمات الأغاني المذكورة أعلاه ، ولكن استخدم التعبير العادي لطباعة كل سطر لا ابدأ بكلمة "Take".

القط tom.txt | سيد / ^ خذ / د
sed-regex-take

سيد ، بالطبع ، مفيد بشكل لا يصدق. لكنها تكون أقوى عند دمجها مع Awk.

ما هو Awk؟

اوك، مثل Sed ، هي لغة برمجة مصممة للتعامل مع نصوص كبيرة. ولكن بينما يتم استخدام Sed لمعالجة النص وتعديله ، يتم استخدام Awk في الغالب كأداة تحليل و الإبلاغ.

مثل Sed ، تم تطوير Awk لأول مرة في Bell Labs في السبعينيات. لا يأتي اسمه من ما البرنامج هل، بل الألقاب لكل من المؤلفين - ألفريد أهو ، وبيتر وينبرغر ، وبريان كيرناغان.

يعمل Awk من خلال قراءة ملف نصي أو إدخال دفق سطر واحد في كل مرة. يتم فحص كل سطر لمعرفة ما إذا كان يتطابق مع نمط محدد مسبقًا. إذا تم العثور على تطابق ، يتم تنفيذ إجراء.

ولكن في حين أن Sed و Awk قد يشتركان في أغراض متشابهة ، فهما لغتان مختلفتان تمامًا ، مع فلسفتين تصميم مختلفتين تمامًا. أووك أقرب إلى بعض لغات الأغراض العامة كيفية اختيار لغة برمجة للتعلم اليوم والحصول على وظيفة رائعة في عامينقد يستغرق الأمر سنوات من العمل المتفاني لتصبح مبرمجًا جيدًا حقًا ؛ فهل هناك طريقة لاختيار اللغة الصحيحة لتبدأ من اليوم ، من أجل الحصول على وظيفة غدا؟ اقرأ أكثر مثل C و Python و Bash. لديها أشياء مثل الوظائف ، ونهج أكثر تشابهًا C لأشياء مثل التكرار والمتغيرات (James Bruce شرح كيفية عمل التكرار الأسس المطلقة للبرمجة للمبتدئين (الجزء الثاني)في الجزء الثاني من دليلنا المبتدئ المطلق للبرمجة ، سأغطي أساسيات الدوال وقيم الإرجاع والحلقات والشروط. تأكد من أنك قرأت الجزء الأول قبل معالجة هذا ، حيث شرحت ... اقرأ أكثر ). ببساطة ، يبدو الأمر وكأنه لغة برمجة.

لذا ، لنجربها. باستخدام كلمات Take On Me ، سنطبع جميع الأسطر التي يزيد طولها عن 20 حرفًا.

طول awk ($ 0)> 80 'tom.txt طول awk

المثال التالي لقد بلا خجل كريبت من وثائق Awk الرسمية. لكنه مثال رائع على إمكانات هذه اللغة القوية ، رغم أنها صغيرة. إنه أيضًا عرض رائع لكيفية عمل أشياء مثل التكرار والمتغيرات فيه. أولاً ، قم بإنشاء ملف يسمى "WordCount.awk" ، وأضف الأسطر التالية.

{for (i = 1؛ ط <= NF ؛ ط ++) تكرار [$ i] ++ }
END {لـ (word in freq) printf "٪ s \ t٪ d \ n"، word، freq [word] }

احفظه ، ثم قم بتشغيله باستخدام الأمر التالي.

awk -f WordCount.awk tom.txt

عدد الكلمات
رائع ، أليس كذلك؟ ربما ستلاحظ أنهم ليسوا في أي نوع من النظام. أنت يستطيع فرز النتائج باستخدام أداة الفرز يونكس. لكن سنترك ذلك ليوم آخر. سنبقي الأمر بسيطًا.

الجمع بين الاثنين

Awk و Sed كلاهما قوي بشكل لا يصدق عند الجمع بينهما. يمكنك القيام بذلك باستخدام أنابيب Unix. تلك هي "|" بت بين الأوامر.

دعنا نجرب هذا: سنقوم بسرد جميع الأسطر في Take On Me التي تحتوي على أكثر من 20 حرفًا ، باستخدام Awk. ثم ، سنقوم بتجريد كل الخطوط التي تبدأ "يأخذ". معًا ، يبدو كل هذا كما يلي:

طول awk ($ 0)> 20 'tom.txt | سيد / ^ خذ / د

وينتج هذا:

awk-length-sed

الآن دعونا نقلب ذلك. سنبدأ بإزالة جميع الأسطر التي تبدأ بـ Take ، ثم تحويلها إلى Awk ، حيث سنحسب عدد المرات التي تظهر فيها كل كلمة. يبدو قليلا مثل هذا:

القط tom.txt | sed / ^ خذ / د | awk -f WordCount.awk
رائع

قوة سيد وأوق

هناك الكثير الذي يمكنك شرحه في مقال واحد. لكنني آمل أن تكون قد أوضحت مدى قوة Sed و Awk. ببساطة ، إنهم قوة معالجة النصوص.

لذا، لماذا يجب عليك الاهتمام؟ حسنًا ، بالإضافة إلى حقيقة أنك لا تعرف أبدًا متى تحتاج إلى إجراء تغييرات متكررة يمكن التنبؤ بها على مستند نصي ، فإن Sed و Awk يعدان رائعين لتحليل ملفات السجل. هذا مفيد بشكل خاص عندما تحاول تصحيح مشكلة في خادم LAMP الخاص بك هل اشتركت في SSH-Web Hosting؟ لا تقلق - قم بتثبيت أي برنامج ويب بسهولةألا تعرف أول شيء عن تشغيل Linux من خلال سطر الأوامر القوي؟ لا تقلق بعد الآن. اقرأ أكثر ، أو الاطلاع على سجلات الوصول الخاصة بك لمعرفة ما إذا تم اختراق الخادم الخاص بك.

هل وجدت استخدامًا مثيرًا للاهتمام لـ Sed و Awk؟ هل هناك أي أدوات لينكس أخرى تشعر بأنها لا تحظى بالتقدير؟ اسمحوا لي أن أعرف في التعليقات أدناه ، وسنتحدث.

ماثيو هيوز مطور برامج وكاتب من ليفربول بإنجلترا. نادرًا ما يتم العثور عليه بدون كوب من القهوة السوداء القوية في يده ويعشق جهاز Macbook Pro والكاميرا الخاصة به. يمكنك قراءة مدونته على http://www.matthewhughes.co.uk ومتابعته على تويتر علىmatthewhughes.