Bash / grep команд

grep команд

grep бол "Global Regular Expression Print" гэсэн үгийн товчлол юм. Нэр нь хэцүү сонсогдох ч хэрэглэхэд маш энгийн — файл эсвэл текстээс тодорхой мөрүүдийг хайж олдог. Хөгжүүлэгчид grep-г өдөр бүр ашигладаг.

Үндсэн хэрэглээ

bash
# Файлаас "error" гэсэн үг агуулсан мөрүүдийг хайх
grep "error" app.log

# Pipe-ээр ирсэн гаралтаас хайх
ls -la | grep ".txt"

# Олон файлаас нэгэн зэрэг хайх
grep "TODO" *.sh

grep хайлтын үр дүнг дэлгэцэнд харуулна. Олдоогүй бол юу ч харуулахгүй.

Хэрэгтэй тугнууд (flags)

bash
# -i : том/жижиг үсгийг ялгахгүй (case-insensitive)
grep -i "error" app.log
# "Error", "ERROR", "error" бүгдийг олно

# -n : мөрийн дугаарыг харуулна
grep -n "error" app.log
# 42: ERROR: connection failed

# -c : тохирсон мөрийн тоог харуулна
grep -c "error" app.log
# 17

# -v : тохирохгүй мөрүүдийг харуулна (урвуу хайлт)
grep -v "DEBUG" app.log
# DEBUG биш бүх мөрийг харуулна

# -r : директорт рекурсив хайх
grep -r "TODO" ./src/
# src/utils.sh:15: # TODO: алдааг зохицуулах

# -l : зөвхөн файлын нэрийг харуулна (мөрийг биш)
grep -rl "error" ./logs/

Олон тугийг нэгтгэх

Тугуудыг хосолж болно:

bash
# Мөрийн дугаартай, case-insensitive хайлт
grep -in "warning" app.log

# Дэд директоруудад хайж, зөвхөн файлын нэр харуулах
grep -rl "config" ./src/

# Тохирохгүй мөрийг дугаартай харуулах
grep -vn "^#" config.sh
# # тэмдгээр эхлэхгүй мөрүүд (тайлбар биш мөрүүд)

Тогтмол илэрхийлэл (regex) үндэс

grep нь энгийн regex дэмждэг:

bash
# ^ — мөрийн эхлэл
grep "^ERROR" app.log
# "ERROR" гэж эхэлсэн мөрүүд

# $ — мөрийн төгсгөл
grep "success$" app.log
# "success" гэж төгссөн мөрүүд

# . — дурын нэг тэмдэгт
grep "err.r" app.log
# "error", "errpr" г.м.

# * — өмнөх тэмдэгт 0 ба түүнээс олон удаа давтагдах
grep "colou*r" words.txt
# "color", "colour", "colouur" г.м.

# -E тугтай өргөтгөсөн regex ашиглаж болно
grep -E "error|warning|critical" app.log
# Гурван нөхцөлийн аль нэгтэй тохирох мөрүүд

Практик жишээнүүд

Ажлын амьдрал дээр grep-г хэрхэн ашигладгийг харцгаая:

bash
#!/bin/bash

# Лог файлаас алдааг шүүж тайлан гаргах
LOG_FILE="app.log"
REPORT="error-report.txt"

echo "=== Алдааны тайлан $(date) ===" > $REPORT

echo "Нийт алдааны тоо:" >> $REPORT
grep -c "ERROR" $LOG_FILE >> $REPORT

echo "" >> $REPORT
echo "Сүүлийн 10 алдаа:" >> $REPORT
grep -n "ERROR" $LOG_FILE | tail -10 >> $REPORT

echo "Тайлан хадгалагдлаа: $REPORT"
bash
# Код дотрох бүх TODO-г олох
grep -rn "TODO\|FIXME\|HACK" ./src/

# .env файлаас тодорхой key-г олох
grep "DATABASE" .env

# Процессуудаас nginx ажиллаж байгаа эсэхийг шалгах
if ps aux | grep -q "[n]ginx"; then
  echo "nginx ажиллаж байна"
else
  echo "nginx унтарсан байна"
fi

grep -q нь "quiet" горим — зөвхөн exit code буцаадаг, дэлгэцэнд юу ч харуулдаггүй. if нөхцөлд ашиглахад тохиромжтой.

Дараагийн хичээлд:

sed командыг судална — текст дотроос хайж солих, мөр устгах, текст боловсруулах хүчирхэг хэрэгсэл.