معالجة النصوص: grep وsed وawk — أدوات المهندس القوية
grep: البحث في الملفات النصية
الأمر grep (Global Regular Expression Print) هو أداة البحث الأقوى في Linux.
يُستخدم يومياً في البيئات الصناعية للبحث في سجلات المستشعرات، ملفات إعدادات SCADA، وسجلات أخطاء التطبيقات.
grep "ERROR" /var/log/scada.log # البحث عن كلمة
grep -i "warning" sensor.log # بدون تمييز حالة الأحرف
grep -n "temperature" data.csv # عرض رقم السطر
grep -c "ALARM" /var/log/alerts.log # عدّ الأسطر المطابقة
grep -r "192.168.1" /etc/ # بحث في كل ملفات مجلد
grep -v "DEBUG" app.log # الأسطر التي لا تحتوي الكلمة
grep -A 3 "CRITICAL" system.log # عرض 3 أسطر بعد كل تطابق
grep -l "timeout" /var/log/*.log # أسماء الملفات المطابقة فقط
التعبيرات النظامية: أنماط البحث المتقدمة
التعبيرات النظامية (Regular Expressions) تسمح بتعريف أنماط بحث مرنة.
grep "^2026-04" sensor.log # أسطر تبدأ بـ 2026-04
grep "\.csv$" filelist.txt # أسطر تنتهي بـ .csv
grep "temp[0-9]" data.log # temp متبوعة برقم
grep -E "ERROR|CRITICAL|FATAL" app.log # أي من هذه الكلمات
grep -E "temp:[0-9]{2,3}" sensor.log # temp: متبوعة برقمين أو ثلاثة
جدول الرموز الأساسية
| الرمز | المعنى | مثال |
|---|---|---|
. |
أي حرف واحد | a.c يطابق abc، aXc |
* |
صفر أو أكثر من التكرار | ab*c يطابق ac، abc |
^ |
بداية السطر | ^ERROR |
$ |
نهاية السطر | OK$ |
[] |
مجموعة أحرف | [0-9] أي رقم |
sed: البحث والاستبدال في الملفات
الأمر sed يعالج النصوص سطراً بسطر، مثالي لتعديل ملفات الإعدادات.
sed 's/old_ip/new_ip/' config.conf # استبدال أول تطابق في كل سطر
sed 's/old_ip/new_ip/g' config.conf # استبدال كل التطابقات
sed -i 's/port=502/port=503/g' modbus.conf # التعديل المباشر على الملف
sed '/^#/d' config.conf # حذف أسطر التعليقات
sed '/^$/d' data.txt # حذف الأسطر الفارغة
sed -n '10,20p' large_log.txt # عرض الأسطر من 10 إلى 20
awk: معالجة البيانات المنظمة في أعمدة
الأمر awk ممتاز لمعالجة البيانات المنظمة مثل ملفات CSV وسجلات المستشعرات.
awk '{print $1}' data.log # طباعة العمود الأول
awk '{print $1, $3}' data.log # العمودين الأول والثالث
awk -F',' '{print $2}' sensors.csv # الفاصلة كفاصل أعمدة
# الأسطر حيث العمود الثالث أكبر من 80
awk '$3 > 80 {print $0}' temperature.log
# حساب المتوسط
awk '{sum += $2; count++} END {print sum/count}' readings.csv
# تصفية بشرط نصي
awk -F',' '$1 == "sensor_A" {print $0}' data.csv
cut و sort و uniq: أدوات تكميلية
cut -d',' -f2 sensors.csv # العمود الثاني (فاصل: فاصلة)
cut -d':' -f1 /etc/passwd # أسماء المستخدمين
sort data.txt # ترتيب أبجدي
sort -n numbers.txt # ترتيب رقمي
sort -t',' -k3 -n sensors.csv # ترتيب حسب العمود الثالث
sort errors.log | uniq # إزالة التكرارات
sort errors.log | uniq -c # عدّ تكرار كل سطر
sort errors.log | uniq -d # الأسطر المكررة فقط
مثال عملي: استخراج إنذارات الحرارة من سجل مستشعرات
ملف السجل بالتنسيق: timestamp,sensor,type,value,status
2026-04-15 08:01:00,sensor_A,temperature,45.2,OK
2026-04-15 08:01:00,sensor_B,temperature,82.7,ALARM
2026-04-15 08:02:00,sensor_A,pressure,3.1,OK
# استخراج كل إنذارات الحرارة
grep "temperature" sensors.log | grep "ALARM"
# المستشعرات التي تجاوزت 80 درجة
awk -F',' '$3 == "temperature" && $4 > 80 {print $1, $2, $4}' sensors.log
# عدّ الإنذارات لكل مستشعر
grep "ALARM" sensors.log | awk -F',' '{print $2}' | sort | uniq -c | sort -rn
دمج الأدوات معاً
القوة الحقيقية تظهر عند دمج هذه الأدوات عبر الأنابيب:
# أعلى 5 مستشعرات حرارة مع متوسط القراءات
awk -F',' '$3 == "temperature" {sum[$2]+=$4; c[$2]++} END {for(s in sum) print s, sum[s]/c[s]}' \
sensors.log | sort -k2 -rn | head -5
# استخراج ساعات الذروة للإنذارات
grep "ALARM" sensors.log | cut -d' ' -f2 | cut -d: -f1 | sort | uniq -c | sort -rn
الخلاصة
تعلمت في هذا الدرس أدوات معالجة النصوص: grep للبحث، sed للاستبدال، awk لمعالجة الأعمدة، وcut وsort وuniq كأدوات تكميلية. هذه الأدوات مجتمعة تشكل ترسانة قوية لتحليل سجلات المستشعرات واستخراج التقارير من البيانات الصناعية. في الدرس القادم سنتعلم نظام الصلاحيات لتأمين ملفات الإعدادات الحساسة.