AXV

grep, sed, awk va xargs

grep, regex, sed, awk, xargs, quvur zanjirlari

10-sinfDevOps5-hafta · 13-dars

Bugun nimalarni o'rganamiz?

grep va regex

Qidirish va naqsh

sed va awk

Almashtirish va ustunlar

xargs va zanjir

Natijani argumentga

Takrorlash

uniq dan oldin nega sort kerak?

uniq faqat yonma-yon takrorlangan qatorlarni birlashtiradi.
01

grep va regex

Qidirish va naqsh

grep qanday ishlaydi

Matn oqimi Naqsh (regex) Mos qatorlar Chiqish Faqat naqshga mos qatorlar o'tadi

app.log va grep


cat > app.log <<'EOF'
2025-03-01 10:00:01 INFO server started port=8080
2025-03-01 10:00:05 WARN disk 85%
2025-03-01 10:01:12 ERROR db timeout user=ali
2025-03-01 10:02:30 INFO login user=vali
2025-03-01 10:03:44 ERROR db timeout user=soli
EOF
grep ERROR app.log
grep -c ERROR app.log
grep -n -i "login" app.log
grep -v INFO app.log
grep -E "ERROR|WARN" app.log
grep "user=a.i" app.log
grep "^2025" app.log
  
grep -c ERROR app.log ikkita ERROR qatori bo'lgani uchun 2 chiqaradi. Naqshni tirnoqqa oling: shell * va $ belgilarini o'zgartirmasin.

Mini-test

grep -v INFO app.log nimani chiqaradi?

-v mos kelmagan qatorlarni ko'rsatadi.
02

sed va awk

Almashtirish va ustunlar

Matnni qayta ishlash

Kirish matni sed: almashtir awk: ustuntanla Hisobot sed qatorlarni, awk ustunlarni boshqaradi

sed va awk misollari


sed 's/ERROR/XATO/' app.log
sed -n '3,5p' app.log
sed '/INFO/d' app.log

awk '{print $3}' app.log
awk '$3=="ERROR" {print $NF}' app.log
awk '{print $3}' app.log | sort | uniq -c
awk -F: '{print $1}' /etc/passwd
  
sed -i faylni o'zgartiradi. Avval -i.bak bilan nusxa oling yoki natijani ekranda tekshiring.

Mini-test

awk '{print $3}' app.log nimani chiqaradi?

$3 — bo'sh joy bilan ajratilgan uchinchi maydon.
03

xargs va zanjir

Natijani argumentga

Qo'llanmadagi zanjir

ps aux grep nginx awk: PID xargs kill Har bosqich keyingisiga kirish beradi

xargs misollari


ps aux | grep nginx | awk '{print $2}' | xargs kill -9

ps aux | grep [n]ginx | awk '{print $2}'
find . -name "*.log" | xargs grep -l ERROR
echo "a b c" | xargs -n 1 echo
ls *.txt | xargs -I {} cp {} yedek/
  
[n]ginx naqshi grep ning o'zini topmaydi. Avval kill siz natijani ko'ring, so'ng xargs kill qo'shing; imkon bo'lsa kill -9 o'rniga oddiy kill ishlating.

Mini-test

xargs nima qiladi?

xargs stdin ni argumentlarga aylantiradi.

grep, sed va awk

grep

Qatorlarni qidiradi va filtrlaydi (ERROR bor qatorlar)
VS

sed / awk

sed qatorni o'zgartiradi, awk ustunni tanlaydi va hisoblaydi

Qidirish uchun grep, almashtirish uchun sed, ustun uchun awk.

Atamalar. Bosing

regex

bosing

Matn naqshini yozish tili

^ va $

bosing

Qator boshi va oxiri

$NF

bosing

awk: oxirgi maydon

xargs

bosing

Chiqishni argumentga aylantiradi

Log tahlili bosqichlari

1. Toping

grep ERROR app.log bilan kerakli qatorlar.

2. Ajrating

awk '{print $NF}' bilan kerakli ustun.

3. Sanang

sort | uniq -c bilan takrorlar soni.

Muhim naqshlar

BelgiMa'nosiMisol
^qator boshi^2025
$qator oxiriali$
.istalgan bitta belgia.i
*0 yoki ko'p takrorab*
[0-9]raqam[0-9][0-9]%
a|byoki (grep -E)ERROR|WARN

Pastga bosing: tekshiruv

Natijani tekshirish

  1. app.log ni yarating (heredoc).
  2. grep -c ERROR app.log bilan 2 chiqishini tekshiring.
  3. awk '{print $3}' app.log | sort | uniq -c bilan sanoqni oling.

Foydalanuvchilarni ajratish


grep ERROR app.log
  

Foydalanuvchilarni ajratish


grep ERROR app.log | awk '{print $NF}'
# user=ali
# user=soli
  

app.log raqamlarda

0
qator: butun log
0
ta ERROR qatori
0
xil daraja: INFO, WARN, ERROR

Quvur bilan bir necha soniyada hisobot tayyor.

Amaliy topshiriq 20 daqiqa

OsonERROR sanash: app.log da ERROR qatorlari sonini toping.
O'rtaFoydalanuvchilar: ERROR qatorlaridagi foydalanuvchi nomlarini (user=...) chiqaring.
O'rtaAlmashtirish: sed bilan ERROR so'zini XATO ga almashtirib, faqat shu qatorlarni chiqaring.
QiyinDaraja hisoboti: Har bir daraja (INFO, WARN, ERROR) necha marta uchraganini eng ko'pidan boshlab chiqaring.

Dars xulosasi

grep

Qidiradi: -i -n -v -c -r -E.

sed va awk

sed almashtiradi, awk ustunlarni ishlaydi.

xargs

Chiqishni argumentga aylantiradi; ehtiyot bo'ling.

Uyga vazifa: app.log tahlili: grep, sed, awk va xargs.

Keyingi dars: cron va monitoring

crontab, at, htop, iotop

5-hafta · 14-dars