Daha çox

İki sətir əvəzetmə funksiyasını bir ifadədə necə birləşdirmək olar?


Bəzi küçə etiketlərini dəyişdirmək istəyirəm "Musterstraße"içəri"Musterstr."və ya"Muster Straße"içəri"Muster Str."

Onsuz da ilk iş üçün bunu etdim:

dəyişdirin ("ad", 'straße', 'str.')

və ikinci hal üçün:

dəyişdirin ("ad", 'Straße', 'Str.')

Bəs ikisini necə birləşdirirəm?

Fərqli üslubları sınadım:

dəyişdir ("ad", 'straße', 'str.') VƏ ya əvəz et ("ad", 'straße', 'str.') dəyişdir (əvəz et ("ad", 'straße', 'str.') (" adı ", 'straße', 'str.'))

Cozefin həlli yaxşı oxunur, tövsiyə edərdim, amma orijinal sualınıza cavab vermək üçün:

dəyişdirin (dəyişdirin ("ad", 'straße', 'str.'), 'Straße', 'Str.')

Bunu istifadə etmədən edə bilərsiniz dəyişdirin funksiya:

"ad" 'strabe', sonra 'str. "ad" kimi "Strabe" kimi sonra "Str." son

Bu, hər hansı bir sütun üçün asanlıqla daha çox şərt əlavə etməyə imkan verir.


Bir simli içərisində bir alt simli tapmaq üçün bir funksiya var (tapmaq) və bir simldəki müəyyən bir diapazonu başqa bir simli ilə əvəz etmək üçün bir funksiya var (dəyişdirin), belə ki, istədiyiniz effekti əldə etmək üçün bunları birləşdirə bilərsiniz:

Bir şərhə cavab olaraq, düşünürəm ki, replaceAll çox güman ki, buna bənzəyəcək:

C ++ 11 ilə std :: regex istifadə edə bilərsiniz:

Qaçma xarakterindən qaçmaq üçün ikiqat ters eğik tələb olunur.

std :: string əvəzetmə metoduna malikdir, axtardığınız budur?

Özümü sınamamışam, find () və replace () sənədlərini oxumağınız kifayətdir.

Yeni simli qaytarmaq üçün bunu istifadə edin:

Performansa ehtiyacınız varsa, giriş sətrini dəyişdirən optimallaşdırılmış bir funksiya, sətrin bir nüsxəsini yaratmır:

Bəli, bunu edə bilərsən, lakin ilk sətrin yerini stringin find () üzvü ilə tapmalı və əvəzinə (()) üzvü ilə əvəzləməlisən.

Standart Kitabxanadan istifadə etməyi planlaşdırırsınızsa, bütün bunları çox yaxşı əhatə edən C ++ Standard Library kitabının bir nüsxəsini əldə etməlisiniz.

Bu bir seçim kimi səslənir

string.replace (string.find ("% s"), string ("% s"). size (), "Something")

Bunu bir funksiyaya bağlaya bilərsiniz, lakin bu bir sətirli həll məqbul səslənir. Məsələ burasındadır ki, bu yalnız ilk hadisəni dəyişdirəcək, üstündən keçmək istəyə bilərsiniz, eyni zamanda bu simvolla (% s) bir neçə dəyişən daxil etməyə imkan verir.

Std :: string :: find () heç bir şey tapmayana qədər axtarılan sətrin digər hadisələrini tapmaq üçün dəfələrlə std :: string :: find () çağırır. Çünki std :: string :: find () qaytarır mövqe matçın təkrarlayıcılarını etibarsız saymaq problemimiz yoxdur.


Simli funksiyalar

Simlərlə işləmək üçün bu simli funksiyalardan və bəzi toplama funksiyalarından istifadə edə bilərsiniz. Simli funksiyalar yalnız simlərdə işləyir.

Simli funksiya Tapşırıq
qat İki və ya daha çox simli birləşdirin və birləşdirilmiş simli qaytarın.
bitər Bir sətrin göstərilən alt sətirlə bitib bitmədiyini yoxlayın.
format nömrəsi Müəyyən edilmiş formata əsasən bir ədədi simli olaraq qaytarın
bələdçi Bir sətir kimi qlobal olaraq unikal bir identifikator (GUID) yaradın.
Indeksi Bir alt simli üçün başlanğıc mövqeyini qaytarın.
lastIndexOf Bir alt sətrin son baş verməsi üçün başlanğıc mövqeyini qaytarın.
uzunluq Bir simli və ya massivdəki elementlərin sayını qaytarın.
dəyişdirin Bir alt sətri göstərilən sətirlə əvəz edin və yenilənmiş sətri qaytarın.
bölmək Orijinal sətirdə göstərilən ayırıcı xarakterə əsaslanan daha böyük sətirdən vergüllə ayrılmış alt sətirləri olan bir sıra qaytarın.
ilə başlayır Bir simlin müəyyən bir alt simdən başlayıb başlamadığını yoxlayın.
alt sətir Müəyyən edilmiş mövqedən başlayaraq simli bir simvoldan qaytarın.
aşağı Siçanı kiçik formatda qaytarın.
yuxarı Bir sətri böyük formatda qaytarın.
kəsmək Bir simdən aparıcı və arxada olan boşluğu silin və yenilənmiş simli geri qaytarın.


Ən yaxşı təcrübələr

CONCATENATE funksiyası əvəzinə ampersand & amp işarəsini istifadə edin.

Ampersand (& amp) hesablama operatoru bir funksiyadan istifadə etmədən mətn elementlərini birləşdirməyə imkan verir.

Məsələn, = A1 & amp B1 = CONCATENATE (A1, B1) ilə eyni dəyəri qaytarır. Bir çox halda ampersand operatorundan istifadə strings yaratmaq üçün CONCATENATE istifadə etməkdən daha sürətli və asandır.

Dizələri birləşdirmək və formatlaşdırmaq üçün MƏTN funksiyasından istifadə edin.

MƏTN funksiyası ədədi dəyəri mətnə ​​çevirir və rəqəmləri mətn və ya işarələrlə birləşdirir.

Məsələn, A1 xanasında 23.5 rəqəmi varsa, nömrəni dollar məbləğində formatlaşdırmaq üçün aşağıdakı düsturdan istifadə edə bilərsiniz:


Birləşdirmək üçün + operatorunu istifadə etməyin nə vaxt mənalı olduğunu və nə vaxt istifadə etməyinizi merak edə bilərsiniz qat () metod. İkisi arasındakı bəzi fərqlər:

  • The qat () metod yalnız String obyektlərini birləşdirə bilər - bir String obyektində çağırılmalı və parametri bir String obyekti olmalıdır. Bu onu daha məhdudlaşdırıcı edir + operator səssizcə hər hansı bir simli olmayan arqumenti bir sətirə çevirdiyindən operator.
  • The qat () metodu bir NullPointerException atır əgər obyekt bir boş istinad varsa, isə + operator "null" simli kimi sıfır bir istinadla məşğul olur.
  • The qat ()) metodu yalnız iki simli birləşdirməyə qadirdir - çoxsaylı arqument götürə bilməz. The + operator istənilən sayda simli birləşdirə bilər.

Bu səbəblərdən + operator daha çox simləri birləşdirmək üçün istifadə olunur. Geniş miqyaslı bir tətbiq inkişaf etdirirsinizsə, bununla da, Java-nın simli konversiyasını idarə etmə üsuluna görə ikisi arasında fərqlənə bilər, buna görə də simləri birləşdirdiyiniz kontekstdən xəbərdar olun.


Simli İnterpolasiya üçün Xoş Bir Yeni C # Sintaksis

C # -nin ilk bir neçə versiyası üçün standartları istifadə edərək simləri formatladıq string.Format API:

Bu API ilə istifadə olunan sintaksis üzərində minimal inkişaflar var idi printf və ilk dəfə C dili üçün hazırlanmış API-lər. Bu API-lər 1970-ci illərin ortalarına və ya daha əvvələ təsadüf edir.

Bütün bu illər ərzində bu API-dən çox irəliləməli idik. Nəhayət, C # 6 ilə sətir interpolasiyası üçün yeni xüsusiyyətlər mətn və hesablanmış dəyərlərin birləşməsi olan sətirləri istehsal edərkən kodunuzu daha aydınlaşdıracaqdır. Biçimli mətnlə işləmək getdikcə daha çox yayılmışdır ki, bu C # 6 üçün qatil xüsusiyyəti ola bilər.

Bu yazıda sizə simli interpolasiya üçün göndərmə sintaksisini göstərdim və istifadə edəcəyiniz bir çox ssenarini müzakirə etdim. Bu xüsusiyyətin ilk açıq baxışdan son buraxılışına qədər olan bəzi sintaksis dəyişikliklərini də müzakirə edirəm. İnternetdəki bəzi mənbələr hələ də bu xüsusiyyət üçün əvvəlki yayım sintaksislərinə istinad edir, buna görə nə mövcud olduğunu bilmək vacibdir.

Sadə bir nümunə ilə hazırkı sintaksisi əhatə etməyə başlayaq. Aşağıdakı kod sətri əvvəlki nümunədəki ilə eyni dəyəri verir:

Bu misal C # 6-da sətir interpolasiyasında istifadə olunan əsas sintaksisini təmin edir. Format sətirini dollar işarəsi ilə başlayaraq sətir interpolasiyasını tətbiq edirsiniz ($) xarakter. Format sətrindəki "deliklər" mötərizə ilə qeyd olunur ( ) simvol. Əsas inkişaf, sonrakı parametrlərə mövqelə indekslər əvəzinə C # ifadələrini yerləşdirdiyiniz mötərizələrin içərisindədir. Bu oxunaqlılıqda böyük bir inkişafdır və düzəltmək çox asandır. Istifadə etmək əvəzinə və bu parametri axtarırsan, tapırsan , formatlanmış sətirdə nəyin yerləşdiriləcəyini dərhal izah edir. Diqqət yetirin ki, istifadə etdiyim arqumentlərdən biri tamdır (şəxs. yaş). Eynilə ilə string.Format, istənilən obyektdən istifadə edə bilərik. O obyekt bir simli olmadıqda, çərçivə çağıracaq ToString () bir simli çevirmək. Eyni konstruksiya bu şəkildə yazıla bilər:

Unutmayın ki, dəyişənlərlə məhdudlaşmadığınız mötərizələr arasında hər hansı bir etibarlı C # ifadəsini qoya bilərsiniz. Məsələn, bir nöqtəni və başlanğıcdan uzaqlığını bu şəkildə yaza bilərsiniz:

İki konsepsiya yenidir. Bu nümunəni diqqətlə nəzərdən keçirək və bu anlayışların necə işlədiyini görəcəksiniz.

Birincisi, son ifadə bir çağırışdır Math.Sqrt, parametr olduğu yerdə X ^ 2 + Y ^ 2 (düzbucaqlı üçbucağın hipotenusunu hesablamaq üçün əsas Pifaqor teoremindən istifadə etməklə):

Hər hansı bir etibarlı C # ifadəsinə içəridə icazə verilir interpolyasiya edilmiş simldəki simvollar. Buna & # 8212; sadəcə zənglər, LINQ sorğuları, hesablamalar və şərtlər daxildir.

Bəyanatdakı əlavə mötərizələr (sintaksisin işıqlandırılmasında qırmızı) açılış və ya bağlanma dəstinin necə yazılacağına dair bir nümunə təqdim edir (<) və ya (>) interpolasiya edilmiş bir sətirdə. Sol cüt mötərizənin yazılması (<<) açılış dəstəyini istehsal edir (<) çıxışda. Bir cüt sağ mötərizə yazmaq (>>) bağlama aparatını istehsal edir (>) çıxışda.

Məsələn, bir nöqtənin dəyərləri varsa (3, 4) x, y üçün bu ifadə qurulacaq str dəyərinə <3, 4> mənşəyindən 5-dir.

Çox güman ki, x və y dəyərləri və demək olar ki, məsafə xoş nəticəyə malik olmayan cütlərdir. Varsayılan nümayəndəlikdə hər hansı bir ondalık sayı olacaq və sizin üçün gözəl formatda olmayacaqdır. Simli interpolasiya xüsusiyyəti, əvəzetmənin bir hissəsi kimi format simlərini təyin etməyə imkan verir. Ondalık nöqtənin sağındakı iki rəqəmlə üzən nöqtə dəyərini aşağıdakı kimi təyin edə bilərsiniz:

Hər hansı bir etibarlı format simli bu ifadə üçün "deşik" ə yerləşdirə bilərsiniz. Bağırsaq qoyun (:) ifadədən sonra və nöqtə nöqtəsini izləyən format sətri. Düzgün format sətirləri iki nöqtədən əvvəlki ifadənin növündən asılıdır. Budur, format simlərim hamısıdır F2, üzən nöqtə sayı üçün onluq nöqtədən sonra iki rəqəmi göstərən.

Bu dəyişikliklərdən sonra kod xəttim çox uzanır. Sətri bölmək üçün sözün hərfi simvolundan istifadə edək:

Bəli, sözdə simli interpolyasiya edilmiş sətir konstruksiyaları ilə birləşdirə bilərsiniz.

Bütün C # İfadələri Yaxşıdır

İndi bu xüsusiyyətin bəzi kənarlarını araşdıraq. Mötərizədə hər hansı bir etibarlı C # ifadəsinin qanuni olduğunu dedim (<>) simli interpolasiya üçün.

Bir çox API bir string parametri götürə bilər. Məsələn, aşağıdakı sətir cari tarixi xüsusi formatda formatlaşdırır:

Diqqət yetirin ki, cari tarixin göstərildiyi tırnaklardan qaçmaq üçün xüsusi simvollara ehtiyac yoxdur. Formatlana bilən bir sətirdə açılış və bağlanma mötərizələri arasında yerləşdirdiyiniz bütün mətn C # mənbə kodu kimi təhlil ediləcəkdir. Hərfi simli kimi yozulmayacaq. Hər hansı bir qanuni C # ifadəsi etibarlıdır. Konfransda və ya istifadəçi qrupunda bu xüsusiyyəti nümayiş etdirdiyim zaman, tamaşaçılar arasındakı insanlar həmişə işləməyəcək bir C # konstruksiyası ilə çıxış etməyə çalışırlar. Hələ idarə etməyiblər. Bir nəfər belə təklif etdi string.Format interpolyasiya edilmiş simli içərisinə zəng edin. Bəli, işləyir. Ancaq həqiqətən çirkin. Bəli, interpolyasiya edilmiş simləri yuva edə bilərsiniz. Xahiş edirəm bu cür quruluşu öz kodunuza yazmayın! Aşağıdakı sətri yalnız C # kompilyatorunun interpolasiya edilmiş sətir arqumentlərini normal C # kimi işlədiyini göstərmək üçün yazdım:

Yaxşı ki çox çirkin. Ancaq iç içə çevrilmiş iplər düzgün təhlil olunur.

Şərti ifadəni mötərizələrlə əhatə etməli olduğuma diqqət yetirin (cəsarətli aşağıda) kompilyatorun iki sətri bir format sətrinin başlanğıcı kimi şərh etməməsi üçün:

Bu dəli bir şey yazmağa ehtiyac yoxdur. Buna qarşı şiddətlə tövsiyə edirəm. Ancaq təhlilçinin gücü çox güclü üstünlüklər gətirir. Tez-tez istifadə etdiyim bir sahə Razor baxışlarıdır. ASP.NET 5 (ASP.NET-ə daxil olan əsas yeniləmə) istifadə edərək bir sayt qurursanız, istifadəçi baxışlarınızda simli interpolasiya xüsusiyyətindən istifadə edə bilərsiniz. Məsələn, mövcud ASP.NET şablonları bu kodu _LoginPartial.cshtml fayl:

Yenilənmiş şablon bu kodu yaradır:

Burada yalnız interpolyasiya edilmiş simlər üçün dəyişikliklərdən daha çox şeyə diqqət yetirin. Yeni atributlar. Üçün daha qisa bir sintaksis təmin edir Html.ActionLink zəng edin. Razor sintaksisinin görünüşlərdə simli interpolasiyanı istifadə etmək üçün öz təbii konstruksiyalarını necə qəbul etdiyini çox sevirəm. Sadəcə "at" simvolunu əlavə edin (@) HTML-də hər hansı bir C # ifadəsinə. Bunu qəbul etdikcə Razor görünüşlərimin ölçüsü az qala üçdə biri azaldı.

Beynəlmiləlləşmə (və bir az tarix)

Bu xüsusiyyətin son yeniləmələrindən biri, sətir interpolasiyasını kodunuzun mövcud mədəniyyətdən fərqli bir mədəniyyət və ya dil üçün sətirləri formatlaşdırması lazım olduğu ssenarilərdə daha zənginləşdirən bir az dəyişikliyi əhatə etdi.

İndiyə qədər göstərilən bütün nümunələr simlər yaratmışdır. Tərtibçi cari mədəniyyətdən istifadə edərək sətri formatlaşdıracaq. Amma dollar işarəsi ($) simvol bir sətir yaratmaqla məhdudlaşmaq lazım deyil. Tərtibçini fərqli bir növ yaratmağa məcbur edə bilərsiniz, FormattableString. Bu tip, formatlanacaq arqumentlərlə yanaşı, kompozit format simli təmsil edir. Boru kəmərinə keçməyinizi və son məhsul üzərində daha çox nəzarət etməyinizi təmin edir.

Sətir interpolasiyasının obyektləri (rəqəmlər, tarixlər və s.) Formatlayarkən cari mədəniyyətdən istifadə etməsini istəyə bilməzsiniz. Həddindən artıq yükləmə çağıraraq format əməliyyatı üçün müəyyən bir mədəniyyəti təyin edə bilərsiniz string.Format. Aşağıdakı misal, dövrü olduğu Almaniya üçün bir rəqəmi ehtiva edən bir simli formatlaşdırır (.) nömrəni bütöv hissədən ayırmaq üçün ABŞ-da istifadə olunan simvol vergüllə əvəz olunmalıdır (,) xarakter:

Bu xüsusiyyət, inkişaf dövründə, mövcud yerdən fərqli bir mədəniyyət üçün nəticə yaratması lazım olan bir çox istəklərə cavab olaraq əlavə edildi. Bu xüsusiyyət veb tətbiqetmə yaradan inkişaf etdiricilər üçün xüsusilə vacib idi.

Bu xüsusiyyətin inkişafı zamanı tək dəyişiklik deyildi. İlk tətbiqetmələrində bu xüsusiyyət sadəcə hər hansı bir çağırışda mövqeli yer tutucuları adlanan arqumentlərlə əvəz etmişdir string.Format. Xüsusiyyəti işıqlandırmaq üçün brace ( ) simvol qaçdı:

Ancaq bu istifadənin bir çox məhdudiyyəti var idi. Mötərizələri formatlanmış bir sətirdə çap etmək asan deyildi. Ayrıca, yalnız bir zəng ilə mövcuddur string.Format məhdud bir çox ssenari.

Daha sonra $ sintaksis tətbiq olundu, formatlaşdırma çox asanlaşdırıldı və daha əvvəl qeyd etdiyim ASP.NET 5-də Razor-a məxsus sintaksis daxil olmaqla digər ssenarilər açıldı. Son dəyişikliklər xüsusi mədəniyyət formatlamasını dəstəklədi.

Bu dəyişiklikləri GitHub-da mövcud olan dil dizayn qeydləri tarixində görə bilərsiniz. Əvvəlki qeydlərdən bəziləri Roslyn kodu CodePlex-də olanda yayımlandı. Bu qeydlər zamanla GitHub-a köç edə bilər.

C # -də Simli İnterpolasiyaya dair İlkin Rəhbər

Bu yeni xüsusiyyəti çox sevirəm. İstifadə etdiyim hər bir deyimi tamamilə əvəz etdi hər hansı bir kodda C # son versiyasını istifadə edərək yazıram. Sadəlik kod keyfiyyətini son dərəcə yaxşılaşdırır. Lakin, dəyişdirmək üçün mövcud bir kodu geri qaytarmaq üçün vaxt ayırmadım. Yeni simli interpolasiya xüsusiyyəti əvvəlki versiyalarda istifadə etdiyimiz demək olar ki, eyni konstruksiyalara qədər yığılır. Yeni kodu seçməyimə baxmayaraq, köhnə bir konstruksiyanın istifadə olunduğu funksiyanı dəyişdirmədiyim müddətdə onu yeniləmirəm. Faydaları, əlavə zövq üçün kifayət qədər böyük deyil. Rutinə əsaslı yeniləmələr edirəm, bu yeni xüsusiyyəti istifadə etmək üçün kodu yeniləyirəm, səhv düzəlişləri və ya başqa bir sinifdə yeni xüsusiyyətlər üçün etmirəm.


Birləşdirən iplər ^

Lakin bəzi tapşırıqlar operatorların istifadəsini tələb edir. Məsələn, PowerShell-in qatlama funksiyası yoxdur. Bunun əvəzinə, artı operatoru ilə yalnız iki və ya daha çox simli birləşdirə bilərsiniz:

Alternativ olaraq, iki sətri ikiqat təkliflər daxilində genişləndirə bilərsiniz:

Nümunədə yer iki sözün bir-birinə yapışmamasına zəmanət verir. Bununla birlikdə, başqa bir ayırıcı əlavə edə bilərsiniz.

PowerShell-də birləşdirən simlər

Bu metod bir simli sıra elementlərini birləşdirmək üçün də uyğundur:

PowerShell burada avtomatik olaraq əlaqəli massiv elementləri arasında boşluq əlavə edir.

Simləri birləşdirmək üçün başqa bir seçim qoşulmaq operator. İstifadəsi bəlkə də biraz əksdir. Normalda, birləşmədən sonra sətri ayırıcı ilə ayırmaq istəmədiyiniz təqdirdə operatoru sətrin qarşısına qoyursunuz:

Nümunədəki "Helloworld" nəticəsini bəyənmirsinizsə və iki sözün arasına boşluq qoymaq istəyirsinizsə, zəng etməlisiniz -qoşun bu yolla:


9.7.1. KİMİ

LIKE ifadəsi, əgər doğrudursa simli verilənlərlə uyğun gəlir naxış. (Gözlənildiyi kimi, BƏYƏN DEYİL ifadəsi, LİKE doğru qayıdırsa, yalnış qaytarır və əksinə. Ekvivalent bir ifadədir YOX (simli KİMİ naxış).)

Əgər naxış yüzdə işarələr və ya alt cizgilər içermir, o zaman naxış yalnız sətrin özünü təmsil edir, bu halda LIKE bərabər operator kimi davranır. Alt xətt (_) naxış hər hansı bir simvol faiz işarəsi (uyğun gəlir)%) hər hansı bir sıfır və ya daha çox simvol ardıcıllığı ilə uyğun gəlir.

Nümunə uyğunluğu həmişə bütün simli əhatə edir. Buna görə, bir sətrin içərisində bir ardıcıllıqla uyğunlaşdırmaq istənirsə, naxış yüzdə işarəsi ilə başlamalı və bitməlidir.

Başqa simvollara uyğun gəlmədən hərfi alt və ya faiz işarəsini uyğunlaşdırmaq üçün müvafiq simvol naxış əvvəl qaçış xarakteri olmalıdır. Varsayılan qaçış xarakteri ters eğikdir, lakin istifadə edərək fərqli bir seçim edilə bilər QAYIN bənd. Qaçış xarakterinin özünə uyğun gəlmək üçün iki qaçış simvolunu yazın.

Qeyd: Standard_conforming_strings söndürülmüşdürsə, hərfi simli sabitlərində yazdığınız hər hansı bir əks sətir ikiqat olmalıdır. Daha çox məlumat üçün Bölmə 4.1.2.1-ə baxın.

Yazmaqla heç bir qaçış xarakteri seçmək mümkün deyil QAÇIN ''. Bu, qaçış mexanizmini təsirli bir şəkildə aradan qaldırır və bu da nümunədəki alt və faiz işarələrinin xüsusi mənasını söndürməyi mümkünsüz edir.

Açar söz BƏYƏK əvəzinə istifadə edilə bilər KİMİ aktiv bölgəyə uyğun olaraq matçı hərflərə həssas etmək. Bu SQL standartında deyil, PostgreSQL uzantısıdır.

* ILIKE-yə uyğundur. Həmçinin var !

* sırasıyla BƏLƏMƏYƏN YOX BƏLƏMƏYƏN DEYİL təmsil operatorları Bu operatorların hamısı PostgreSQL-spesifikdir.


Grepdən çoxlu sətir, naxış və söz üçün istifadə nümunələri

Bir neçə sətri axtarmaq üçün grep-dən necə istifadə edəcəyinizi başa düşmək üçün bir neçə fərqli istifadə vəziyyətini sınaqdan keçirəcəyimiz bəzi mətnləri olan bir fayl yaratmağı təklif edirik.

Bizim vəziyyətimizdə dosyaya ad verdik sample.txt və mətnin bir neçə bəndini əlavə etdi. Faylı. Qovluğunda saxladıq test istifadəçi, yəni /home/test/sample.txt

Bir Faylda Birdən çox Nümunəni necə qucaqlamaq olar

Aşağıdakı nümunələrdə genişlənmiş grep əvəzinə grep istifadə edəcəyik. Unutma boru işarəsindən əvvəl arxa əyikdən istifadə edin.

Grep, alternativ operator kimi boru simvolunu dəstəkləmədiyi üçün, qaçmaq üçün işarəni (backslash ) istifadə etməlisiniz. grep boruya fərqli yanaşma əmri.

Məsələn, sözləri axtarmaq əlavədəyəriçində sample.txt fayl bu əmri istifadə edin:

Çıxış grep etmək istədiyiniz simli vurğulayır.

Eyni fayl başqa bir qovluqdadırsa, bu qovluğa keçməlisiniz və ya faylın tam yolundan istifadə etməlisiniz:

İki sözdən çox axtarış etmək, eyni şəkildə əlavə etməyə davam edin.

Məsələn, üç söz axtarmaq üçün istədiyiniz simvol sətrini, arxa əyilmə və boru əlavə edin:

İstifadə edərkən yuxarıdakı grep əmrinin necə göründüyünü görək grep -E , egrepgrep -e :

İstifadə edəcəyik grep digər nümunələrdə, ancaq hansının sintaksisini seçdiyinizdən istifadə edə bilərsiniz.

Bir sənəddə birdən çox dəqiq oyunu axtarın

Birdən çox naxış üçün dəqiq uyğunluq tapmaq istəyirsinizsə, keçin -w bayrağı grep əmr.

Məsələn, aşağıdakı nəticə olmadan axtarış arasındakı fərqi göstərir -w və onunla:

Gördüyünüz kimi nəticələr fərqlidir. Birinci əmr, istifadə etdiyiniz simlərlə bütün sətirləri göstərir.

İkinci əmr çoxsaylı simlər üçün tam uyğunluqları necə göstərəcəyini göstərir. Çıxış yalnız dəqiq sözləri olan sətirləri yazdırır.

Qeyd: Grep bir çox funksiya təklif edir. Əlavə istifadə halları üçün grep istifadə qaydalarını öyrənin.

Birdən çox simli üçün Grep istifadə edərkən vəziyyəti görməməzliyə vurun

Birdən çox naxış axtararkən nəyisə itirməmək üçün istifadə edin -i bayraq məktub halını görməməzlikdən gəlmək üçün.

Məsələn, bu əmrlə işi görməməzlikdən gələcəyik:

Çıxış iki əmrin necə fərqləndiyini göstərir. Əgər daxil etsəniz -i işarələyin və hərf halını görməməzliyə vurun, birdən çox matçın nəticəsi bütün qarşılaşmaları əhatə edir.

Bu yolla əlavə nəticələr əldə edirsiniz. Siz də əlavə etsəniz -w bu əmri işarələsək, nəticələri daha da daralda bilərsiniz:

Bir sənəddə birdən çox matçın sayını göstərin

Tutaq ki, bir günlük sənədini izləyirsiniz və xəbərdarlıqların və ya mesajların sayının artıb-artmadığını görmək istəyirsiniz. Çox sayda matç geri döndüyündə ətraflı nəticələr görmək istəmirsiniz.

Məsələn, birdən çox matçın sayını göstərmək bootstrap.log faylı daxil edin:

Çıxış kibrit sayını yazdırır. Bu şəkildə xəbərdarlıq və səhv sayının artıb-artmadığını tez bir zamanda təyin edə bilərsiniz.

Xüsusi bir Fayl Növündə Birdən çox Nümunə üçün Grep

Yalnız müəyyən bir sənəd növündə birdən çox sətir axtarmaq üçün grep istifadə edə bilərsiniz. Günlük sənədlərini bir qovluqda izləmək istəyirsinizsə və ya bütün mətn sənədləri arasında axtarış etmək istəyirsinizsə, bir fayl adı əvəzinə bir ulduz və fayl uzantısı istifadə edin.

Məsələn, hamısı ilə xəbərdarlıq və səhvlər axtarmaq .log faylları / var / log / kataloqu daxil edin:

Bu seçimin necə işlədiyini daha yaxşı göstərmək üçün yalnız qarşılaşmaların sayını göstərəcəyik.

Çıxışda, istifadə etdiyiniz simləri axtaran grep fayllarının hamısı göstərilir.

Qeyd: Əgər bir "İcazə rədd edildi" mesajı, yuxarıdakı nümunədə etdiyimiz kimi, sudo imtiyazlarına ehtiyacınız var. Bütün sənədləri daxil etmək üçün istifadə edin sudo ilə grep əmr. Sudo parolunu daxil edin və grep bütün faylları axtaracaq.

Faylda Birdən çox Nümunə axtarın

The grep komanda yalnız ulduz işarəsini istifadə etdiyiniz zaman cari qovluqda axtarır.

Birdən çox nümunə axtararkən bütün alt qovluqları daxil etmək üçün əlavə edin -R grep üçün operator:

Çıxış bütün sənədlərdən nəticə verəcəkdir grep əmri / var / log / qovluğu və alt kataloquları.

Bu təlimatda bir faylda birdən çox söz və ya sətir nümunəsini axtarmaq üçün grep-dən necə istifadə edəcəyinizi öyrəndiniz. Bələdçi sizə genişləndirilmiş grep-dən necə istifadə edəcəyinizi də göstərdi.

Bu məqalədəki nümunələr, grep axtarışınızı necə dəqiqləşdirəcəyinizi tətbiq etməyə kömək edir.