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 командыг судална — текст дотроос хайж солих, мөр устгах, текст боловсруулах хүчирхэг хэрэгсэл.