Giriş
Linux grep əmri girişin filtrləşdirilməsi üçün istifadə olunur.
GREP Global Regular Expression Printer-ə istinad edir və buna görə də səmərəli istifadə etmək üçün müntəzəm ifadələr haqqında bəzi biliklərə malik olmalıdır.
Bu yazıda mən sizə grep əmrini anlamağa kömək edəcək bir sıra nümunələr göstərəcəyəm.
01/09
GREP istifadə edərək bir faylda bir dize axtarmaq üçün necə
Aşağıdakı uşaq kitabları ilə kitablar adlı bir mətn faylınız olduğunu düşünün:
- Robin Hood
- Qırmızı papaq
- Peter Pan
- Goldilocks və Üç Ayılar
- Qar Ağ Və Yeddi Cüceler
- Pinnochio
- The Hat In The Hat
- Üç kiçik donuz
- Gruffalo
- Charlie Və Şokolad Fabriki
Başlıqdakı "The" sözü ilə bütün kitabları tapmaq üçün aşağıdakı sözdizimdən istifadə edəcəyiniz:
kitablar
Aşağıdakı nəticələr qaytarılacaq:
- Goldilocks və Üç Ayılar
- Qar Ağ Və Yeddi Cüceler
- The Hat In The Hat
- Üç kiçik donuz
- Gruffalo
- Charlie Və Şokolad Fabriki
Hər halda "The" sözü vurğulanacaq.
Qeyd edək ki, axtarışın həcmi həssasdır, belə ki başlıqlardan biri "The" əvəzinə "əvəzinə" malikdirsə, onda geri qaytarılmayacaqdır.
Vəziyyəti göz ardı etmək üçün aşağıdakı keçid əlavə edə bilərsiniz:
grep kitablar - layout-case
Siz həmçinin -i keçidini aşağıdakı kimi istifadə edə bilərsiniz:
grep -i kitablar
02/09
Joker kartları istifadə edərək faylda bir dize axtarmaq
Grep əmri çox güclüdür. Nəticələri filtrelemek üçün çoxlu model eşleme üsullarından istifadə edə bilərsiniz.
Bu nümunədə, joker kartları istifadə edərək faylda bir simli axtarışın necə göstərəcəyini göstərəcəyəm.
Aşağıdakı İskoç yer adları ilə yerlər adlanan bir faylınız olduğunu düşünün:
aberdeen
aberystwyth
aberlour
inverurie
inverness
Newburgh
yeni geyik
yeni galloway
Glasgow
edinburgh
İnver ilə bütün yerləri adda tapmaq istəyirsinizsə aşağıdakı sözdizimini istifadə edin:
grep inver * yerləri
Yulduz (*) joker 0 və ya bir çoxunu təşkil edir. Buna görə də inver deyilən bir yer və ya inverness deyilən bir yer varsa, həm də qaytarılacaq.
Istifadə edə biləcək başqa bir joker (.) Dövrüdür. Bunu bir məktubla uyğunlaşdırmaq üçün istifadə edə bilərsiniz.
grep inver.r yerləri
Yuxarıdakı komanda inverurie və inverary adlanan yerləri tapacaqdır, lakin yalnışlıq tapmayacaq, çünki yalnız iki dövr arasındakı bir joker bir müddət ola bilər.
Joker dövrlər faydalıdır, ancaq siz axtarış etdiyiniz mətnin bir hissəsi kimi bir problem yarada bilər.
Məsələn, bu domen adlarının siyahısına baxın
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- vəroidgames.about.com
- netforbeginners.about.com
- herdaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Yalnızca aşağıdakı sözdizimini istifadə edərək axtarış edə bilərsiniz:
grep * haqqında * domainnames
Siyahıda aşağıdakı adı varsa, yuxarıdakı komanda aşağı düşəcək:
- herdaylinuxuser.com/about.html
Buna görə, aşağıdakı sözdizimini cəhd edə bilərsiniz:
grep * about.com domainnames
Aşağıdakı adı olan bir domen olmadığı təqdirdə bu yaxşı işləyərdi:
haqqında
Haqqında about.com axtarış üçün həqiqətən aşağıdakı nöqtədən qaçmaq lazımdır:
grep * haqqında .com domainnames
Sizə göstərmək üçün son joker, sıfır və ya bir xarakterli sual işarəsidir.
Misal üçün:
grep? ver placenames
Yuxarıda göstərilən əmr aberdeen, aberystwyth və ya hətta berwick dönərdi.
03 09
Grep istifadə edərək başlanğıcda və sətir sonunda sətirlər axtarın
Karat (^) və dollar ($) simvolu satırların başlanğıc və sonlarında nümunələri axtarmaq imkanı verir.
Aşağıdakı komandanın adları ilə futbol adlanan bir faylınız olduğunu düşünün:
- Blackpool
- Fənərbaxça
- Manchester City
- Leicester City
- Mançester Yunayted
- Nyukasl
- FC Manchester United
Əgər Manchester ilə başlayan bütün komandaları tapmaq istəyirsinizsə, aşağıdakı sözdizimdən istifadə edərdiniz:
Məşqçi qrupları
Yuxarıda göstərilən komanda "Mançester Yunayted" və "Mançester Yunayted" i qayıdırdı.
Alternativ olaraq, aşağıdakı sözdizimini istifadə edərək United ilə bitən bütün komandaları tapa bilərsiniz:
grep United $ qrupları
Yuxarıda göstərilən komanda Manchester United və Nyukasl Yunanıstanı geri qaytaracaqdı, amma FC United Manchester.
04/09
Grep istifadə edərək matçların sayını hesablamaq
Grep istifadə edərək bir nümunə uyğun olan faktiki xəttləri qayıtmaq istəmirsinizsə, ancaq sadəcə neçə sintaksis istifadə edə biləcəyinizi bilmək istəyirsən:
grep -c model giriş falı
Nümunə iki dəfə uyğunlaşsaydı, 2 nömrəsi geri veriləcəkdi.
05/09
Grep istifadə edərək uyğun olmayan bütün şərtləri tapmaq
Aşağıdakı kimi qeyd olunan ölkələrlə yer adları siyahısının olduğunu düşünün:
- aberdeen scotland
- Glasgow şotland
- Liverpul İngiltərə
- colwyn bay
- london ingilis
Colwyn bayının bununla əlaqəli heç bir ölkəyə malik olmadığını fərq etmiş ola bilərsiniz.
Bir ölkə ilə bütün yerləri axtarmaq üçün aşağıdakı sözdizimini istifadə edə bilərsiniz:
grep land $ yerlər
Bu nəticələr, colwyn bayı istisna olmaqla, bütün yerlər olacaqdır.
Bu, əlbəttə ki, torpaqda bitən yerlərə (çətin elmi) işləyir.
Aşağıdakı sözdizimini istifadə edərək seçimi ters edə bilərsiniz:
grep -v land $ yerlər
Bu torpaq ilə bitməmiş bütün yerləri tapa bilər.
06-dan 09-dək
Grep istifadə edərək dosye boş boşluqlar tapmaq
Boş bir xətt aşağıdakı kimi tapdıqda fayl oxunmasını dayandıran üçüncü tərəf tətbiqindən istifadə edən bir giriş faylı var:
- aberdeen scotland
- inverness şotland
- Liverpul İngiltərə
- colwyn bay uels
Tətbiq liverpooldan sonra xəttə çıxdıqda, mənasını oxu dayandırmaq colwyn bay tamamilə buraxılmışdır.
Aşağıdakı sözdizimlə boş xətləri axtarmaq üçün grep istifadə edə bilərsiniz:
grep ^ $ yerləri
Təəssüf ki, bu xüsusilə faydalı deyil, çünki yalnız boş xətləri qaytarır.
Əlbəttə, faylın aşağıdakı kimi etibarlı olub-olmadığını yoxlamaq üçün boş satır sayının hesabını əldə edə bilərsiniz:
grep -c ^ $ yerlər
Bununla yanaşı, onları əvəz edə bilmək üçün boş bir xətt olan satır nömrələrini bilmək daha faydalı olardı. Bunu aşağıdakı əmri ilə edə bilərsiniz:
grep -n ^ $ yerlər
07-də 09
Grep istifadə edərək, böyük və ya kiçik harfli simvollar üçün axtarış
Grep istifadə edərək, bir dildə olan xətlərin aşağıdakı simvolları istifadə edərək, böyük simvolları müəyyən edə bilərsiniz:
grep '[AZ]' filename
Kvadrat mötərizələr [], simvol aralığını təyin etməyə imkan verir. Yuxarıda göstərilən misalda A və Z arasındakı hər hansı bir xarakter daşıyır.
Bu səbəbdən kiçik simvolları uyğunlaşdırmaq üçün aşağıdakı sözdizimini istifadə edə bilərsiniz:
grep '[az]' filename
Yalnız məktublar, ədədlər və ya digər simvollarla uyğunlaşmaq istəyirsinizsə, aşağıdakı sözdizimdən istifadə edə bilərsiniz:
grep '[a-zA-Z]' filename
Nömrələri ilə eyni şəkildə edə bilərsiniz:
grep '[0-9]' fayl adı
08-də 09
Grep istifadə edərək təkrarlanan naxışları axtarırsınız?
Təkrarlanan nümunəni axtarmaq üçün əyri mötərizədən {} istifadə edə bilərsiniz.
Aşağıdakı kimi telefon nömrələri olan bir faylınız olduğunu düşünün:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Bildiyiniz kimi, nömrənin birinci hissəsi üç rəqəm olmalıdır və bu naxışa uyğun olmayan xəttləri tapmaq istəyir.
Əvvəlki nümunədən bildiyiniz kimi [0-9] bir faylda bütün nömrələri qaytarır.
Bu halda üç ədəddən başlayaraq bir tire (-) ilə başlayan xətləri istərdik. Bunu aşağıdakı sözdizimlə edə bilərsiniz:
grep "^ [0-9] [0-9] [0-9] -" nömrə
Əvvəlki nümunələrdən bildiyimiz kimi, karat (^) xətt aşağıdakı nümunədən başlayacaq deməkdir.
[0-9] 0 ilə 9 arasında hər hansı bir nömrə axtaracaq. Bu üç dəfə daxil edildiyi üçün bu 3 ədədlə eşleşir. Nəhayət, bir tirein üç ədədə nail olması lazım olduğunu ifadə etmək üçün bir tire var.
Kıvırılan mötərizədən istifadə edərək, axtarışı aşağıdakı kimi daha kiçik hala gətirə bilərsiniz:
grep "^ [0-9] \ {3 \} -" nömrə
Çizgi {{bracket} normal ifadənin bir hissəsi kimi işləyir, amma bu, nə deməkdir [0-9] {3} 0'dan 9 dəfə arasında üç dəfə deməkdir.
Buruq parantezlər də aşağıdakı kimi istifadə edilə bilər:
{5,10}
{5,}
{5,10}, axtarış edilən xarakterin ən azı 5 dəfə təkrarlanması, ancaq 10-dan çox olmaması deməkdir. {5,} isə xarakterin ən azı 5 dəfə təkrarlanması lazım olduğunu ancaq daha çox ola bilər.
09/09
Grep istifadə edərək digər əmrlərdən çıxışın istifadə edilməsi
Hal-hazırda fərdi fayllar içində model eşleme baxdığımıza baxmayaraq grep, nümunə uyğunluğu üçün giriş kimi digər əmrlərdən çıxışı istifadə edə bilər.
Bunun ən yaxşı nümunəsi, aktiv əməliyyatları siyahlayan ps komandanlığı istifadə edir.
Məsələn aşağıdakı əmri çalıştırın:
ps -ef
Sisteminizdə çalışan proseslərin hamısı göstərilir.
Müəyyən bir işləmə prosesini aşağıdakı kimi axtarmaq üçün grep istifadə edə bilərsiniz:
ps-f | | grep firefox