Kaip patikrinti, ar eilutėje Bash yra eilutė

How Check If String Contains Substring Bash



Kyla klausimas, kaip patikrinti, ar eilutėje yra antraštė „Bash“. Atsakymas yra: naudokite modelio atitikimą. Dėl to kyla kitas klausimas: kas yra modelio atitikimas? Na, sakinio frazė turi tam tikrų savybių. Štai kodėl jis skiriasi nuo kitų to paties sakinio ar kitų sakinių frazių. Savybės gali būti užkoduotos kaip modelis. Tokiu būdu galima atpažinti tam tikrą eilutės frazę. Šiame straipsnyje paaiškinama, kaip nustatyti tam tikrą antrinę eilutę didesnėje eilutėje, pakeisti antrinę eilutę, suderintą su kita antrine eilute, ir surasti bet kurią antrinę eilutę didesnėje eilutėje pagal indeksą. Tačiau prieš pasineriant į paaiškinimus reikia prisiminti skirtingus būdus, kaip eilutė nustatoma „Bash“.

Styga iš pabėgimo erdvių

Eilutė gali būti sukonstruota pakeičiant kiekvieną tarpą tarpo pabėgimo seka, „“; kaip ir:







myVar= Turizmas į Egiptas yra viena šalies 's pirmaujančios ekonominės pramonės šakos.
išmetė $ myVar

Išėjimas yra:



Turizmas Egipte yra viena iš pirmaujančių šalies ekonomikos pramonės šakų.



Pastaba: apostrofas taip pat naudojo pabėgimo iš kosmoso seką.





Eilutė pagal vieną citatą

Ar programuotojas turi laiko pabėgti iš visų eilutės tarpų? Ne. Todėl geriau naudoti dvi kabutes eilutėms atskirti; toks kaip:

myVar=„Turizmas Egipte yra viena iš šalių“ 'pirmaujanti ekonomikos pramonė “.

Vienos kabutės eilutė neleidžia išplėsti (pakeisti jos poveikiu) jokios pabėgimo sekos. Laimei, jei dvi eilutės yra užkoduotos viena šalia kitos, jos bus laikomos viena eilute. Pabėgimo seka gali būti įterpta tarp jų, kaip nurodyta aukščiau. Pabėgimo seka būtų išplėsta. Taigi išvestis tampa tokia:



Turizmas Egipte yra viena iš pirmaujančių šalies ekonomikos pramonės šakų.

Dvigubų kabučių eilutė

Naudojant dvigubas kabutes, pabėgimo sekos taip pat nėra išplėstos, bet kintamieji. Toliau pateiktas kodas tai iliustruoja:

myVar= Turizmas į Egiptas yra viena šalies 's pirmaujančios ekonominės pramonės šakos.
išmetė $ myVar

Išėjimas yra:

Turizmas Egipte yra viena iš pirmaujančių šalies ekonomikos pramonės šakų.

Pastaba: apostrofas taip pat naudojo pabėgimo iš kosmoso seką.

Šiame straipsnyje pagrindinis nagrinėjamas eilutės tipas yra eilutė viengubose kabutėse.

Reguliariosios išraiškos pagrindai

Reguliariai

Apsvarstykite šią eilutę:

Šis pasaulis tikrai nėra mūsų namai.

Tegul pasaulis yra interesų grandinė. Tada didelė eilutė (visa eilutė) vadinama tiksline eilute arba tiesiog tikslu. „Pasaulis“ kabutėse vadinamas reguliariąja išraiška arba tiesiog regex. Turinys, pasaulis, yra modelis, šiuo atveju.

Paprastas derinimas

Toliau pateiktame kode, jei tiksle randamas žodis „pasaulis“, sakytume, kad žodis atitiko.

p=„Šis pasaulis tikrai nėra mūsų namai“.
reg='pasaulis'
jei [[ $ str= ~$ reg ]];tada
išmetėrasta
Kitas
išmetėnerastas
būti

= ~, kuris yra priskyrimo operatorius, po kurio eina ~, vadinamas įrišimo operatoriumi. Sąlyga patikrina, ar modelis atitinka tikslinę eilutę. Jei taikinyje randama šabloną atitinkanti antrinė eilutė, echo sakinys rodo, kad rasta. Jei jis nerastas, aido teiginys aidi nerastas. Šio kodo išvestis yra tokia:

rasta

Kaip modelis, pasaulis, randamas taikinyje. Atminkite, kad skiriamoji erdvė po [[ir prieš]] buvo išsaugota.

Raštas

Pirmiau pateiktame kode „kaboje esantis pasaulis“ yra reguliarusis reiškinys, o pats pasaulis yra modelis. Tai paprastas modelis. Tačiau dauguma modelių nėra tokie paprasti. Modelis yra surandamos antrinės eilutės apibūdinimas. Taigi „Bash“ modelis naudoja tam tikrus metaženklus. Meta simbolis yra simbolis apie kitus simbolius. Pavyzdžiui, „Bash Pattern“ naudoja šiuos meta simbolius:

^ $ . * +? () [] {} |

Įprasta išraiška taip pat gali būti įvesta sąlyginėse dvigubose skliausteliuose. Bet tai nebūtinai turi būti kabutėse. Taigi, šiuo atveju tai yra pažodžiui, modelis.

Simbolių klasės

Laužtiniai skliaustai

Rasta šio kodo išvestis, tai reiškia, kad įvyko atitiktis:

p='Katė atėjo į kamerą'.
jei [[ $ str= ~[br]adresu]];tada
išmetėrasta
būti

Modelis [cbr] at atitinka katę, prasidedančią „c“, kuri tęsiasi ir baigiasi at. [cbr] at reiškia, sutapkite „c“ arba „b“ arba „r“, po to - at.

Rasta šio kodo išvestis, tai reiškia, kad įvyko atitiktis:

p=- Šikšnosparnis atėjo į kamerą.
jei [[ $ str= ~[br]adresu]];tada
išmetėrasta
būti

Modelis [cbr] at atitinka šikšnosparnį, prasidedantį „b“, kuris tęsiasi ir baigiasi at. [cbr] at reiškia, sutapkite „c“ arba „b“ arba „r“, po to - at.

Rasta šio kodo išvestis, tai reiškia, kad įvyko atitiktis:

p=„Žiurkė atėjo į kamerą“.
jei [[ $ str= ~[br]adresu]];tada
išmetėrasta
būti

Modelis [cbr] at atitinka žiurkę, kuri prasideda „r“ ir tęsiasi ir baigiasi at.

Aukščiau pateiktuose kodo pavyzdžiuose programuotojas nežino, ar tikslinėje eilutėje yra katė, šikšnosparnis ar žiurkė. Tačiau jis žino, kad antrinė eilutė prasideda „c“, „b“ arba „r“, tada tęsiasi ir baigiasi at. Kvadratiniai skliausteliai šablone leidžia skirtingiems galimiems simboliams sutapti su vienu simboliu tam tikroje pozicijoje, palyginti su kitais taikinio objektais. Taigi, skliausteliuose yra simbolių rinkinys, iš kurių vienas atitinka antrinę eilutę. Galiausiai sutampa visa antrinė eilutė.

Veikėjų asortimentas

Pirmiau pateiktas kodas [cbr] yra klasė. Net jei „c“, „b“ arba „r“ atitinka vieną simbolį, jei po to iš karto neatitinka, modelis neatitiks nieko.

Na, yra tam tikri diapazonai, kurie sudarys klasę. Pavyzdžiui, klasę sudaro nuo 0 iki 9 skaitmenų, [0–9], įskaitant 0 ir 9. Mažosios raidės nuo „a“ iki „z“ sudaro klasę [a – z], įskaitant „a“ ir „z“. Didžiosios raidės nuo „A“ iki „Z“ sudaro klasę [A-Z], įskaitant „A“ ir „Z“. Iš klasės tai yra vienas iš simbolių, kuris atitiktų vieną eilutės simbolį.

Šis kodas sukuria atitiktį:

jei [[ „ID8id“= ~[0-9] ]];tada
išmetėrasta
būti

Šį kartą tikslas yra pažodinė būsenos eilutė. 8, kuris yra vienas iš galimų skaičių diapazone, [0-9], atitinka 8 eilutėje „ID8id“. Aukščiau pateiktas kodas yra lygus:

jei [[ „ID8id“= ~[0123456789] ]];tada
išmetėrasta
būti

Čia visi galimi skaičiai buvo parašyti šablone, todėl nėra brūkšnelio.

Pagal šį kodą gaunama atitiktis:

jei [[ „ID8iD“= ~[a-z] ]];tada
išmetėrasta
būti

Atitikimas yra tarp mažųjų diapazono „i“ diapazono [a – z] ir mažosios „i“ tikslinės eilutės „ID8iD“.

Atminkite: diapazonas yra klasė. Klasė gali būti didesnio modelio dalis. Taigi šablone tekstas gali būti prieš pamoką ir (arba) po jos. Toliau pateiktas kodas tai iliustruoja:

jei [[ „ID8id yra identifikatorius“= ~ ID[0-9]id ]];tada
išmetėrasta
būti

Išvestis: rasta. „ID8id“ iš modelio atitiko „ID8id“ tikslinėje eilutėje.

Neigimas

Atitiktis negaunama naudojant šį kodą:

jei [[ „0123456789101112“= ~[^0-9] ]];tada
išmetėrasta
Kitas
išmetėnerastas
būti

Išėjimas yra:

nerastas

Be ^ prieš diapazoną, laužtiniuose skliaustuose, diapazono nulis atitiktų pirmąjį tikslinės eilutės nulį. Taigi, ^ prieš diapazoną (arba pasirenkamus simbolius) paneigia klasę.

Šis kodas sukuria atitiktį, nes sąlyga skamba taip: kad atitiktų bet kurį neskaitinį simbolį bet kurioje taikinio vietoje:

jei [[ „ABCDEFGHIJ“= ~[^0-9] ]];tada
išmetėrasta
Kitas
išmetėnerastas
būti

Taigi išvestis yra: rasta.

[^0-9] reiškia neskaitmenį, todėl [^0-9] yra [0-9] neigimas.

[^a-z] reiškia ne mažąsias raides, todėl [^a-z] yra [a-z] neigimas.

[^A-Z] reiškia ne didžiąsias raides, todėl [^A-Z] yra [A-Z] neigimas.

Galimi ir kiti neigimai.

Laikotarpis (.) Šablone

Šablono laikotarpis (.) Atitinka bet kurį simbolį, įskaitant jį patį. Apsvarstykite šį kodą:

jei [[ „6759WXY.A3“= ~ 7.9W.Y.A]];tada
išmetėrasta
būti

Kodo išvestis randama, nes kiti simboliai sutampa. Vienas taškas atitinka „5“; kitas taškas atitinka „X“; o paskutinis taškas sutampa su tašku.

Atitinkama pakaitalas

Apsvarstykite šį sakinį tikslinei eilutei:

Narvelyje yra įvairių rūšių paukščių.

Kažkas gali norėti sužinoti, ar šis tikslas yra balandis, povas ar erelis. Galima naudoti šį kodą:

p=„Narvelyje yra įvairių tipų povų“.
jei [[ $ str= ~ balandis|povas|erelis]];tada
išmetėrasta
Kitas
išmetėnerastas
būti

Išėjimas yra, rastas. Kintamoji metaženklis, | buvo įdarbintas. Gali būti dvi, trys, keturios ir daugiau alternatyvų. Šiame kode yra „povas“.

Grupavimas

Toliau pateiktame pavyzdyje skliausteliai buvo naudojami simboliams grupuoti:

scena (šokėja)

Grupė čia yra scenos šokėja, apsupta meta simbolių (ir). (šokėjas) yra pogrupis, o scena (šokėja) - visa grupė. Apsvarstykite šiuos dalykus:

(Šokėja nuostabi)

Čia pogrupis arba substring yra, šokėjas yra nuostabus.

Antrinės eilutės su bendrosiomis dalimis

Suinteresuotas asmuo yra asmuo, suinteresuotas verslu. Įsivaizduokite verslą, turintį svetainę „pea.com“. Įsivaizduokite, kad kompiuteryje yra viena iš šių tikslinių eilučių:

Tinklalapis, portal.com yra skirtas verslui .;

Yra suinteresuotas asmuo.;

Suinteresuotoji šalis dirba už portal.com .;

Tegul bet kuri iš šių eilučių yra taikinys. Programuotojas gali norėti sužinoti, ar statymas.com ar suinteresuotoji šalis yra bet kurioje tikslinėje eilutėje. Jo modelis būtų toks:

svarus.com | suinteresuotas asmuo

naudojant pakaitą.

statymas du kartus buvo įvestas dviem žodžiais. To galima išvengti įvedus šabloną taip:

akcijų paketas (.com | turėtojas)

.com | turėtojas šiuo atveju yra pogrupis.

Pastaba: šiuo atveju naudojamas pakaitinis simbolis. bus daroma paieška adresu Rasta šio kodo išvestis:

p=„Svetainė,„ portal.com “skirta verslui.“
jei [[ $ str= ~ statymas(.su|laikiklis) ]];tada
išmetėrasta
būti

Čia sutapatinta antrinė eilutė yra pastatyta.com.

„BASH_REMATCH“ iš anksto nustatytas masyvas

BASH_REMATCH yra iš anksto nustatytas masyvas. Tarkime, kad modelis turi grupes. Visa grupė sutapo, eina į šio masyvo indekso 0 langelį. Pirmasis pogrupis sutampa, eina į 1 indekso langelį; antrasis pogrupis sutapo, eina į 2 indekso langelį ir pan. Šis kodas parodo, kaip naudoti šį masyvą:

p=„Atėjo scenos šokėjas“.
jei [[ $ str= ~ etapas (šokėjas) ]];tada
išmetėrasta
būti

dėliį $ {! BASH_REMATCH [@]};daryti
printf '{BASH_REMATCH [i]} USD, '
padaryta
išmetė

Išėjimas yra:

rasta
scenos šokėjas, šokėjas,

Visa grupė yra scenos šokėja. Yra tik vienas pogrupis, kuris yra šokėjas.

Pastaba: šablono tarpas praleistas.

Didžiosios/mažosios raidės nepriklausomybės atitikimas

Atitiktis, kaip paaiškinta aukščiau, neskiria didžiųjų ir mažųjų raidžių. Derinimas gali būti atliekamas nepriklausomai nuo bylos. Tai pavaizduota šiame kode:

parduotuvės -snocasematch

p=„Mums patinka gera muzika“.
jei [[ $ str= ~ GoOd]];tada
išmetėrasta
būti

parduotuvės -unocasematch

Išvestis: rasta. Modelis yra „GoOd“. Suderinta antrinė eilutė yra „gera“. Atkreipkite dėmesį, kaip nocasematch parinktis buvo įjungta kodo segmento pradžioje ir išjungta kodo segmento pabaigoje.

Stygos ilgis

Sintaksė norint gauti eilutės ilgį yra:

$ {#PARAMETER}

Pavyzdys:

p=„Mums patinka gera muzika“.
išmetė $ {# str}

Rezultatas: 19.

Styginių mažinimas

Eilutės mažinimo sintaksės yra šios:

$ {PARAMETER: OFFSET}
$ {PARAMETER: OFFSET: LENGTH}

kur poslinkio skaičiavimas prasideda nuo nulio.

Šiame pavyzdyje parodyta, kaip pašalinti pirmuosius 11 eilutės simbolių:

p='Aš visada šokau pagal gerą muziką.'
išmetė $ {str: 10}

Išėjimas yra:

gera muzika.

Skaičiuojant LENGTH, prasideda nuo kito simbolio. Šis kodas parodo, kaip galima leisti eilutės dalį:

p='Aš visada šokau pagal gerą muziką.'
išmetė $ {str: 10: 6}

Išėjimas yra:

ance t

Pirmieji 11 simbolių buvo pašalinti; buvo leidžiami kiti 6 simboliai, o likę simboliai buvo automatiškai pašalinti.

Ieškoti ir pakeisti

Radus antrinę eilutę, ją galima pakeisti kita eilute. Tam naudojamos sintaksės:

kur=$ {PARAMETER/PATTERN/REPLACEMENT}
kur=$ {PARAMETER // PATTERN/REPLACEMENT}
kur=$ {PARAMETER/PATTERN}
kur=$ {PARAMETER // PATTERN}

Pirmoje sintaksėje su vienu pasviruoju brūkšniu pakeičiama tik pirmoji atitiktis. Pavyzdys:

p=„Kameroje yra žiurkė, šikšnosparnis ir katė“.
teisingai=$ {str/[cbr] at/big cow}
išmetė $ str
išmetė $ ret

Išėjimas yra:

Kameroje yra žiurkė, šikšnosparnis ir katė.
Kameroje yra didelė karvė, šikšnosparnis ir katė.

Antrojoje sintaksėje su dvigubais brūkšniais į priekį pakeičiami visi rungtynių įvykiai. Pavyzdys:

p=„Kameroje yra žiurkė, šikšnosparnis ir katė“.
teisingai=$ {str // [cbr] at/big cow}
išmetė $ str
išmetė $ ret

Išėjimas yra:

Kameroje yra žiurkė, šikšnosparnis ir katė.
Kameroje yra didelė karvė, didelė karvė ir didelė karvė.

Trečiosios sintaksės su vienu pasviruoju brūkšniu atveju pirmosios ir vienintelės rungtynės nepakeičiamos.

Be to, pirmoji rasta antrinė eilutė ištrinama. Pavyzdys:

p=„Kameroje yra žiurkė, šikšnosparnis ir katė“.
teisingai={str/[cbr] $}
išmetė $ str
išmetė $ ret

Ketvirtoji sintaksė su dvigubais brūkšniais į priekį nekeičia visų rungtynių. Be to, visos rastos antrinės eilutės ištrinamos. Pavyzdys:

p=„Kameroje yra žiurkė, šikšnosparnis ir katė“.
teisingai=$ {str // [cbr] at}
išmetė $ str
išmetė $ ret

Išėjimas yra:

Kameroje yra žiurkė, šikšnosparnis ir katė.
Kameroje yra a, a ir a.

Išvada

Norint patikrinti, ar eilutėje yra antraštė „Bash“, reikia naudoti šablonų atitiktį. Šablonų derinimas vyksta ne tik esant dviguboms skliausteliams, [[. . . ]]. Tai taip pat gali būti išplėsta naudojant parametrus, kurių $ {. . .}. Išplėtus parametrus, galima gauti antrinę eilutę pagal indeksus.

Šiame straipsnyje pateikiami svarbiausi modelių atitikimo taškai. Yra daugiau! Tačiau tai, ką skaitytojas turėtų išstudijuoti toliau, yra failo vardo išplėtimas.