معالجة النصوص المتقدمة (sed، awk)
استكشفوا أداة 'sed' لتحرير التدفقات، وأداة 'awk' لمعالجة النصوص المتقدمة وفحص الأنماط واستخراج البيانات.
معالجة النصوص المتقدمة (sed، awk) درس مجاني في DevOps Bootcamp على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في DevOps Bootcamp، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة DevOps Bootcamp 4 دروس في المجموع.
تحرير التدفق باستخدام sed
sed، وهو اختصار لـ «محرر التدفق»، أداة قوية لسطر الأوامر لتحليل النص وتحويله. وهي تعالج تدفقات النص سطرًا تلو الآخر. فكّروا فيها كمحرر نصوص غير تفاعلي.
يقرأ sed سطرًا، ويطبق أمرًا (مثل الاستبدال أو الحذف)، ويطبع النتيجة، ثم ينتقل إلى السطر التالي. وهذا يجعله فعالًا جدًا مع الملفات الكبيرة أو البيانات الممررة عبر الأنابيب.
استبدال النصوص البسيط
الاستخدام الأكثر شيوعًا لـ sed هو استبدال النصوص. نستخدم الأمر s، يليه فاصل (غالبًا /)، ثم النمط المطلوب العثور عليه، وفاصل آخر، ونص الاستبدال، وأخيرًا فاصل نهائي.
البنية: sed 's/pattern/replacement/' filename
جرّبوا استبدال "apple" بـ "orange" في ملف نموذجي:
#!/bin/bash
# Create a sample file
echo "I like red apple." > fruits.txt
echo "My favorite fruit is apple." >> fruits.txt
echo "Another apple here." >> fruits.txt
echo "Original content:"
cat fruits.txt
echo ""
echo "---"
echo "Running sed command:"
sed 's/apple/orange/' fruits.txt
# Clean up
rm fruits.txtشامل وغير حساس لحالة الأحرف
افتراضيًا، يستبدل sed أول ظهور للنمط في كل سطر فقط. لاستبدال جميع الظهورات في السطر، استخدم الراية g (الشاملة).
لإجراء بحث غير حساس لحالة الأحرف، استخدم الراية i. ويمكنكم دمج الرايات، مثل gi.
مثال: استبدال جميع الظهورات من "apple" (مع تجاهل حالة الأحرف) بـ "banana".
#!/bin/bash
# Create a sample file
echo "Apple is good." > fruits.txt
echo "I eat an apple and another Apple." >> fruits.txt
echo "Apples are tasty." >> fruits.txt
echo "Original content:"
cat fruits.txt
echo ""
echo "---"
echo "Running sed command (s/apple/banana/gi):"
sed 's/apple/banana/gi' fruits.txt
# Clean up
rm fruits.txtحذف الأسطر باستخدام sed
يمكنكم أيضًا استخدام sed لحذف الأسطر الكاملة التي تطابق نمطًا محددًا. ويُستخدم الأمر d لهذا الغرض.
الصيغة: sed '/pattern/d' filename
يفيد ذلك في إزالة الأسطر غير المرغوب فيها، مثل إدخالات السجل التي تحتوي على "DEBUG" أو الأسطر الفارغة.
لنحذف الأسطر التي تحتوي على "error":
#!/bin/bash
# Create a sample file
echo "INFO: User logged in." > log.txt
echo "WARNING: Disk space low." >> log.txt
echo "ERROR: File not found." >> log.txt
echo "INFO: Operation complete." >> log.txt
echo "ERROR: Permission denied." >> log.txt
echo "Original content:"
cat log.txt
echo ""
echo "---"
echo "Running sed command (/error/d):"
sed '/error/d' log.txt
# Clean up
rm log.txtawk: لغة فحص الأنماط
يُعد awk أداة قوية أخرى لمعالجة النصوص، ويُستخدم غالبًا لاستخراج البيانات وإنشاء التقارير. وبينما يُعد sed محرر تدفق، فإن awk يشبه إلى حد كبير لغة برمجة مصممة للنصوص.
يعالج awk الملفات النصية سطرًا سطرًا، تمامًا مثل sed. لكنه يتعامل مع كل سطر باعتباره "سجلًا"، ويقسّم السجلات إلى "حقول" (أعمدة) استنادًا إلى فاصل.
يستخدم awk المسافات البيضاء (المسافات وعلامات الجدولة) كفاصل للحقول افتراضيًا.
الوصول إلى حقول البيانات
في awk، يُشار إلى الحقول بالرموز $1 و$2 و$3، وهكذا. ويمثل $0 السطر بأكمله.
يمكنكم طباعة حقول محددة باستخدام الأمر print داخل القوسين المعقوفين {}. الصيغة هي: awk '{ print $FIELD_NUMBER }' filename
لنطبع الحقلين الأول والثالث من ملف بيانات بسيط:
#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (print $1, $3):"
awk '{print $1, $3}' data.txt
# Clean up
rm data.txtتصفية الأسطر باستخدام awk
مثل sed تمامًا، يستطيع awk أيضًا تصفية الأسطر استنادًا إلى الأنماط. تحددون نمطًا قبل كتلة الإجراء، ولا يُنفذ الإجراء إلا على الأسطر التي تطابق النمط.
الصيغة: awk '/pattern/ { action }' filename
لنبحث عن أسماء الأشخاص من "London" ونطبعها فقط:
#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "David 28 London" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (/London/ {print $1}):"
awk '/London/ {print $1}' data.txt
# Clean up
rm data.txtالتهيئة والإنهاء باستخدام awk
يتيح awk تحديد إجراءات تُنفذ قبل معالجة أي أسطر (كتلة BEGIN) وبعد معالجة جميع الأسطر (كتلة END).
تُعد كتل BEGIN مناسبة لطباعة العناوين أو تهيئة المتغيرات، بينما تناسب كتل END طباعة الملخصات أو الإجماليات أو التذييلات.
لنضف عنوانًا وتذييلًا إلى المخرجات:
#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (BEGIN/END):"
awk 'BEGIN { print "--- User Data ---" } { print $1, $2 } END { print "--- End Report ---" }' data.txt
# Clean up
rm data.txtالمنطق الشرطي في awk
يمكنكم استخدام عبارات if داخل كتل الإجراءات في awk لتطبيق منطق يعتمد على قيم الحقول أو الشروط الأخرى. وهذا يجعل awk قويًا جدًا لتصفية البيانات وتحويلها بطريقة معقدة.
الصيغة: awk '{ if (condition) { action } }' filename
لنطبع المستخدمين الذين تزيد أعمارهم على 25 عامًا فقط:
#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Diana 27 Berlin" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (if $2 > 25):"
awk '{ if ($2 > 25) { print $1, $2 } }' data.txt
# Clean up
rm data.txtتحقق سريع: sed وawk
لنفترض أن الملف المسمى names.txt يحتوي على المحتوى التالي:
John Doe,30,New York
Jane Smith,25,London
Peter Jones,40,Paris
أي من الأوامر التالية سيطبع أسماء الأشخاص (الحقل الأول) الذين تزيد أعمارهم على 30 عامًا فقط؟
مراجعة: قوة sed وawk
لقد استكشفتم الآن قوة sed لتحرير التدفقات وقوة awk لمعالجة النصوص المتقدمة!
sedمناسب تمامًا للاستبدالات والحذف والتحويلات البسيطة سطرًا سطرًا.awkمتميز في تحليل النصوص المهيكلة والتعامل مع الحقول وتطبيق المنطق الشرطي لاستخراج البيانات وإنشاء التقارير.
تُعد هذه الأدوات أساسية للبرمجة النصية وتحليل السجلات ومعالجة البيانات في بيئة Linux.
الأسئلة الشائعة
هل درس «معالجة النصوص المتقدمة (sed، awk)» مجاني؟
نعم — نص درس «معالجة النصوص المتقدمة (sed، awk)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة DevOps Bootcamp، انتقل إلى CoddyKit PRO. تتضمن دورة DevOps Bootcamp 4 دروس في المجموع.
ماذا ستتعلم في «معالجة النصوص المتقدمة (sed، awk)»؟
استكشفوا أداة 'sed' لتحرير التدفقات، وأداة 'awk' لمعالجة النصوص المتقدمة وفحص الأنماط واستخراج البيانات. تتمرن على DevOps Bootcamp مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ DevOps Bootcamp؟
لا تُشترط خبرة سابقة. DevOps Bootcamp على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «معالجة النصوص المتقدمة (sed، awk)»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس DevOps Bootcamp هذا؟
نعم. كل درس في DevOps Bootcamp يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- معالجة النصوص المتقدمة (sed، awk)
- الأرشفة والضغط (tar، gzip، unzip)
- استخدام القرص ومعلومات النظام (df، du، uname)
- فرز البيانات وإزالة التكرارات (sort، uniq، cut)