grep
istifadəsi ilə mətnin axtarışı
1. grep
nədir?
grep
— mətn fayllarında müəyyən bir şablona uyğun gələn sətirləri axtarmaq üçün güclü bir command-line vasitəsidir. grep
-i Linux dünyasında "dedektiv" kimi təsəvvür edin: o, "dəlilləri" (mətn şablonlarını) "işlərdə" (fayllarda) tapır və onların harada olduğunu bildirir.
grep
adı ed
mətn redaktorundakı bir əmrə əsaslanır: g/re/p
, bu isə "müntəzəm ifadə ilə qlobal axtarış və tapılanların çıxarılması" mənasını verir.
grep
hər yerdə istifadə olunur: loglarda səhvləri tapmaqdan tutmuş, sistem məlumatlarını təhlil etməyə qədər. O, kəmhövsələ deyil və hər hansı mətnlə işləməyə hazırdır — istər sizin gündəlikləriniz olsun, istərsə də server logları.
2. Əsas Sintaksis
Komandanın strukturu:
grep [opciyalar] "şablon" fayl
- [opciyalar] — komandanın əlavə parametrləri.
- "şablon" — axtarış üçün mətn və ya müntəzəm ifadə.
- fayl — axtarışın aparılacağı faylın və ya faylların adı.
Əgər bir neçə faylda mətn axtarmaq istəyirsinizsə, sadəcə onları boşluqla ayırın və ya fayl qrupları ilə işləmək üçün *
və ?
simvollarından istifadə edin.
Nümunə:
grep "error" /var/log/syslog
3. Rahat axtarış üçün opsiyalar
1. -i
: Reqistrin nəzərə alınmaması
Bu opsiya, mətnin böyük və ya kiçik hərflərlə yazılmasından asılı olmadan axtarış aparmağa imkan verir. Məsələn, Error
, ERROR
və error
eyni anda tapılacaq.
İstifadə nümunəsi:
grep -i "error" application.log
2. -v
: İnvert edilmiş axtarış
Böyük güclə, böyük məsuliyyət də gəlir... Bəzi hallarda bizim üçün şablona uyğun olmayan hər şeyi tapmaq vacib ola bilər. Məsələn, "debug" olan sətirləri istisna etmək.
İstifadə nümunəsi:
grep -v "debug" system.log
3. -n
: Sətir nömrələrinin göstərilməsi
Fayl bir çox sətrdən ibarət olduqda, tapılmanın harada olduğunu göstərmək faydalı olur. -n
flag-i hər tapılan sətrə sətir nömrəsini əlavə edir.
İstifadə nümunəsi:
grep -n "error" server.log
4. -r
və ya -R
: Rekursiv axtarış
Mətn şablonlarını yalnız cari direktoriyada deyil, həm də onun bütün alt kataloqlarında axtara bilərsiniz. Əgər minlərlə fayl varsa, ehtiyatlı olun!
İstifadə nümunəsi:
grep -r "keyword" /home/user/documents
4. İstifadə Nümunələri
1. Dəqiq Uyğunluq Axtarışı
example.txt
faylında "hello" sözünü axtarırıq:
grep "hello" example.txt
2. Sətir Parçası Axtarışı
Məsələn, "John" istifadəçi adını ehtiva edən sətirləri tapmağa çalışaq:
grep "John" database.txt
3. Böyük-Kiçik Hərf Həssaslığı ilə Axtarış
Sadəcə "ERROR" axtarırıq, "error" və ya "Error" ilə qarışdırmırıq:
grep "ERROR" log.txt
4. Qovluqda Rekursiv Axtarış
Cari kataloq və onun alt kataloqlarındakı bütün fayllarda "fatal error" mesajı olan sətirləri axtarırıq:
grep -r "fatal error" .
5. Əks Axtarış
error sözünü ehtiva etməyən bütün sətirləri çıxarış edirik:
grep -v "error" server.log
6. Yalnız İlk 10 Uyğunluğu Çıxarmaq
Əgər log çox uzundursa, ilk N mesajla kifayətlənə bilərsiniz:
grep "error" log.txt | head -n 10
7. Səhv Olan Sətirlərin Sayı
Səhvlərin olan sətir sayını hesablamaq və işə ruhən hazırlaşmaq olar:
grep -c "error" log.txt
8. Filtrlərdən İstifadə
Əgər logda çoxlu mətn zibilləri varsa, filtrlərdən istifadə edin. Məsələn, aşağıda loglarda yaddaşla bağlı səhvləri axtarırıq:
cat /var/log/syslog | grep "memory"
5. grep
digər komandalarla birləşdirilməsi
Linux-da komandalar tez-tez birlikdə işləyir (üzr istəyirəm, bir az təkrar oldu). |
pipelərindən istifadə edərək, biz grep
-i digər utilitlərlə birləşdirə bilərik. Gəlin bir neçə praktik nümunəyə nəzər salaq.
1. Sistem mesajlarının süzgəcdən keçirilməsi
Sadəcə USB cihazlarına aid səhvləri bilmək istəyirsiniz? Çox asandır!
dmesg | grep "usb"
Burada biz dmesg
komandasının (sistem mesajlarını göstərmək üçün) çıxışını grep
-ə ötürürük.
2. Filtrlərdən istifadə
Əgər loglarda çox mətn zibilliyi varsa, filtrlərdən istifadə edin. Məsələn, aşağıda biz loglarda yaddaşa aid səhvləri axtarırıq:
cat /var/log/syslog | grep "memory"
3. Proseslər arasında axtarış
nginx
ilə bağlı bütün aktiv prosesləri çıxış etmək:
ps aux | grep "nginx"
6. Genişləndirilmiş imkanlar: regulyar ifadələr
Əgər sadə axtarış kifayət etmirsə, grep
güclü bir alət olan regulyar ifadələri dəstəkləyir. Qorxmağa çalışmayın, bu düşündüyünüz qədər çətin deyil.
Regulyar ifadə nümunəsi
"error" ilə başlayan sətrləri axtarırıq:
grep "^error" logfile.txt
İzah:
^
simvolu "sətirin başlanğıcı" mənasını verir.
".conf" ilə bitən sətrləri axtarırıq:
grep "\.conf$" filelist.txt
İzah:
$
simvolu sətirin sonunu göstərir.\
geri slashı,.
simvolunu hər hansı bir simvol kimi yox, nöqtə kimi tanınması üçün istifadə olunur.
Regulyar ifadələr çox güclü bir alətdir. Bəzən həddindən artıq güclü. Köhnə bir zarafat: əgər sizin probleminiz var və onu regulyar ifadələrlə həll etmək istəyirsinizsə, artıq iki probleminiz var.
7. Praktiki tapşırıq
Bilikləri möhkəmləndirmək üçün aşağıdakı tapşırıqları yerinə yetirin:
access.log
faylında serverin cavab kodu "404" olan sətirləri tapın:grep "404" access.log
/var/log
qovluğunda böyük-kiçik hərf fərqini nəzərə almadan "error" sözünü ehtiva edən bütün sətirləri tapın:grep -ri "error" /var/log
database.log
faylından "DEBUG" sözünü ehtiva etməyən bütün sətirləri çıxarın:grep -v "DEBUG" database.log
Sistem loglarında "Oct 15" tarixini ehtiva edən sətirləri tapın:
grep "Oct 15" /var/log/syslog
application.log
faylında "timeout" uyğunluğu olan sətirləri çıxarın və sətir nömrələrini göstərin:grep -n "timeout" application.log
8. Tez-tez baş verən səhvlər və xüsusiyyətlər
Əgər heç nə görünmürsə, bu mütləq bir səhv deyil. Ola bilsin ki, sadəcə uyğunluq yoxdur. Faylda mətn olduğuna əmin olmaq üçün məsələn,
cat
kimi komandadan istifadə edərək yoxlamağa çalışın.Dırnaq işarələrinə diqqət yetirin. Əgər şablonda boşluqlar və ya xüsusi simvollar varsa, onu mütləq dırnaq işarələrinə alın.
Böyük kataloqlarla çalışanda və
-r
flag-dan istifadə edəndə çoxlu sayda nəticəyə hazır olun. Rahat baxış üçün| less
istifadə edin. Məsələn:grep -r "test" /some/directory | less
İndi grep
-dən istifadəyə tam adət etdiyiniz üçün, artıq hər şeyi və hər yerdə axtarmağa hazırsınız. Böyük kod bazasında bug tapmaqdan tutmuş sistem loglarını analiz etməyə qədər - axtarış bacarıqlarınız sevimli alətlərinizə çevriləcək.
GO TO FULL VERSION