Bash for Oracle DBAs قسمت ششم پردازش متن در Bash با grep ، cut و tr

تا اینجا یاد گرفتیم:

  • شرط‌ها
  • حلقه‌ها
  • توابع

اما واقعیت این است که قدرت واقعی Bash در پردازش متن (Text Processing) است.

تقریباً تمام خروجی‌های لینوکس و اوراکل متنی هستند.

اگر بتوانی متن را فیلتر و پردازش کنی، می‌توانی:

  • logها را تحلیل کنی
  • خروجی RMAN را بررسی کنی
  • کاربران سیستم را فیلتر کنی
  • خطاها را استخراج کنی

در این قسمت سه ابزار پایه و بسیار مهم را یاد می‌گیریم:

  • grep
  • cut
  • tr

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 خطایی وجود دارد یا نه و نام فایل را استخراج کنیم.

if grep -q ERROR backup.log; then
  echo "Error detected in backup.log"
fi

ترکیب ابزارها (قدرت واقعی Bash)

بزرگ‌ترین قدرت Bash در ترکیب دستورات است.

مثال:

grep ERROR backup.log | cut -d' ' -f1 | tr 'a-z' 'A-Z'

  1. پیدا کردن خط‌های خطا
  2. گرفتن ستون اول
  3. تبدیل به حروف بزرگ

این نوع pipeline پایه بسیاری از اسکریپت‌های حرفه‌ای است.


نکته حرفه‌ای

از cat بی‌دلیل استفاده نکنید.

❌ اشتباه:

cat file.txt | grep ERROR

 

✅ درست:
grep ERROR file.txt

تمرین

  1. نام تمام کاربران با UID بزرگ‌تر از 1000 را استخراج کنید.
  2. در یک فایل log تمام IPهایی که شامل 192.168 هستند را پیدا کنید.
  3. یک رشته را به uppercase تبدیل کنید.