CodeGym /Kurslar /Docker SELF /`grep` istifadəsi ilə mətnin axtarışı

`grep` istifadəsi ilə mətnin axtarışı

Docker SELF
Səviyyə , Dərs
Mövcuddur

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 *? 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, ERRORerror 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.
Vacib!

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:

  1. access.log faylında serverin cavab kodu "404" olan sətirləri tapın:

    grep "404" access.log
    
  2. /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
    
  3. 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
    
  4. Sistem loglarında "Oct 15" tarixini ehtiva edən sətirləri tapın:

    grep "Oct 15" /var/log/syslog
    
  5. 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

  1. Ə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.

  2. 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.

  3. 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.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION