تا اینجا یاد گرفتیم:
- شرطها
- حلقهها
- توابع
اما واقعیت این است که قدرت واقعی Bash در پردازش متن (Text Processing) است.
تقریباً تمام خروجیهای لینوکس و اوراکل متنی هستند.
اگر بتوانی متن را فیلتر و پردازش کنی، میتوانی:
- logها را تحلیل کنی
- خروجی RMAN را بررسی کنی
- کاربران سیستم را فیلتر کنی
- خطاها را استخراج کنی
در این قسمت سه ابزار پایه و بسیار مهم را یاد میگیریم:
grepcuttr
1️⃣ grep — جستجو در متن
grep برای پیدا کردن الگو (pattern) در متن استفاده میشود.
ساختار ساده:
grep pattern file
مثال:
grep ERROR /var/log/messages
تمام خطهایی که شامل ERROR باشند چاپ میشوند.
جستجوی بدون حساسیت به حروف
grep -i error file.log
-i باعث میشود کوچک و بزرگ بودن حروف مهم نباشد.
نمایش شماره خط
grep -n ERROR file.log
استفاده در اسکریپت
if grep -q ERROR backup.log; then
echo "Backup has errors"
fi
گزینه -q فقط وضعیت خروجی را بررسی میکند و چیزی چاپ نمیکند.
این دقیقاً برای automation مفید است.
2️⃣ cut — جدا کردن ستونها
cut برای استخراج فیلدهای خاص از یک خط استفاده میشود.
ساختار:
cut -d delimiter -f field_number file
-d:→ جداکننده:-f1→ فیلد اول (نام کاربر)
مثال کاربردی برای DBA
گرفتن لیست UIDها:
cut -d: -f3 /etc/passwd
استفاده همراه با grep
grep bash /etc/passwd | cut -d: -f1
کاربرانی که shell آنها bash است.
3️⃣ tr — تبدیل کاراکترها
tr برای جایگزینی یا حذف کاراکترها استفاده میشود.
ساختار:
tr 'set1' 'set2'
تبدیل حروف کوچک به بزرگ
echo "oracle" | tr 'a-z' 'A-Z'
حذف کاراکتر خاص
echo "a,b,c" | tr -d ','
تبدیل جداکنندهها
مثلاً تبدیل : به space:
cat /etc/passwd | tr ':' ' '
مثال عملی واقعی
فرض کنید میخواهیم بررسی کنیم آیا در log مربوط به backup خطایی وجود دارد یا نه و نام فایل را استخراج کنیم.
echo "Error detected in backup.log"
fi
ترکیب ابزارها (قدرت واقعی Bash)
بزرگترین قدرت Bash در ترکیب دستورات است.
مثال:
grep ERROR backup.log | cut -d' ' -f1 | tr 'a-z' 'A-Z'
- پیدا کردن خطهای خطا
- گرفتن ستون اول
- تبدیل به حروف بزرگ
این نوع pipeline پایه بسیاری از اسکریپتهای حرفهای است.
نکته حرفهای
از cat بیدلیل استفاده نکنید.
❌ اشتباه:
cat file.txt | grep ERROR
تمرین
- نام تمام کاربران با UID بزرگتر از 1000 را استخراج کنید.
- در یک فایل log تمام IPهایی که شامل
192.168هستند را پیدا کنید. - یک رشته را به uppercase تبدیل کنید.