String by Escaping Spaces
Niz se može konstruirati zamjenom svakog prostora razmakom za izbjegavanje razmaka, ''; kao u:
myVar= Turizam u Egipat je jedna od zemlje 's vodeće ekonomske industrije.
izbaciti $ myVar
Izlaz je:
Turizam u Egiptu jedna je od vodećih privrednih grana zemlje.
Napomena: apostrof je također koristio razmaknicu.
String by Single Quotes
Ima li programer vremena za izbjegavanje svih razmaka u nizu? Ne. Stoga je bolje koristiti dva pojedinačna navodnika za razgraničenje niza; kao što su:
myVar='Turizam u Egiptu jedna je od zemalja' 'vodeće gospodarske industrije. 'Niz s jednim navodnikom ne dopušta proširenje (zamjenu sa svojim učinkom) bilo koje eskadrirajuće sekvence. Srećom, ako su dva niza kodirana jedan do drugog, bit će uzeti kao jedan niz. Izbjegavajući niz može se umetnuti između, kao što je gore učinjeno. Bijeg bi se proširio. Tako izlaz postaje:
Turizam u Egiptu jedna je od vodećih privrednih grana zemlje.
String by Double Quotes
Dvostrukim navodnicima se ni eskapcijske sekvence ne proširuju, već se proširuju varijable. Sljedeći kod to ilustrira:
myVar= Turizam u Egipat je jedna od zemlje 's vodeće ekonomske industrije.izbaciti $ myVar
Izlaz je:
Turizam u Egiptu jedna je od vodećih privrednih grana zemlje.
Napomena: apostrof je također koristio razmaknicu.
U ovom članku glavna vrsta niza koji se razmatra je niz u jednostrukim navodnicima.
Osnove regularnog izražavanja
Regularni izraz
Razmotrite ovaj niz:
Ovaj svijet zapravo nije naš dom.
Neka svijet bude podniz interesa. Zatim se veliki niz (cijeli niz) naziva ciljnim nizom ili jednostavno, metom. ‘Svijet’ u navodnicima naziva se regularni izraz ili jednostavno regex. Sadržaj, svijet, u ovom je slučaju uzorak.
Jednostavno podudaranje
U sljedećem kodu, ako se riječ 'svijet' nađe u meti, rekli bismo da se riječ podudara.
str='Ovaj svijet zapravo nije naš dom.'reg='svijet'
ako [[ $ str= ~$ reg ]];zatim
izbacitipronađeno
drugo
izbacitinije pronađeno
biti
= ~, koji je operator dodjeljivanja iza kojeg slijedi ~, naziva se operator vezanja. Uvjet provjerava je li uzorak usklađen u ciljnom nizu. Ako se u cilju nađe podniz koji odgovara uzorku, naredba echo prikazuje pronađeno. Ako nije pronađena, naredba echo eho nije pronađena. Izlaz za ovaj kôd je:
pronađeno
Kako se uzorak, svijet, nalazi u meti. Imajte na umu da je razmak između [[i prije]] zadržan.
Uzorak
U gornjem kodu, 'svijet' u navodnicima je regex, dok je sam svijet uzorak. Ovo je jasan obrazac. Međutim, većina uzoraka nije tako jednostavna. Uzorak je karakterizacija podniza koji se mora pronaći. Dakle, Bash uzorak koristi određene metaznakove. Metakarakter je lik o drugim likovima. Na primjer, Bash Pattern koristi sljedeće metaznakove:
^ $ . * +? () [] {} |
Regularni izraz također se može upisati u dvostruke zagrade uvjeta. Ali ne mora biti pod navodnicima. Dakle, u ovom slučaju to je doslovno uzorak.
Klase likova
Uglate zagrade
Pronađen je izlaz sljedećeg koda, što znači da se dogodilo podudaranje:
str='Mačka je ušla u odaju.'ako [[ $ str= ~[kbr]na]];zatim
izbacitipronađeno
biti
Uzorak, [cbr] at ima usklađenu mačku, koja počinje s 'c', a nastavlja se i završava s. [cbr] u znači, podudarajte se sa 'c' ili 'b' ili 'r', nakon čega slijedi at.
Pronađen je izlaz sljedećeg koda, što znači da se dogodilo podudaranje:
str='Šišmiš je ušao u odaju.'ako [[ $ str= ~[kbr]na]];zatim
izbacitipronađeno
biti
Uzorak, [cbr] at ima usklađeni šišmiš, koji počinje s 'b', a nastavlja se i završava s. [cbr] u znači, podudarajte se sa 'c' ili 'b' ili 'r', nakon čega slijedi at.
Pronađen je izlaz sljedećeg koda, što znači da se dogodilo podudaranje:
str='Štakor je ušao u odaju.'ako [[ $ str= ~[kbr]na]];zatim
izbacitipronađeno
biti
Uzorak, [cbr] at ima usklađenog štakora, koji počinje s 'r', a nastavlja se i završava s.
U gornjim uzorcima koda, programer ne zna postoje li mačka, šišmiš ili štakor u ciljnom nizu. No, on zna da podniz počinje s 'c' ili 'b' ili 'r', zatim se nastavlja i završava s. Uglate zagrade u uzorku dopuštaju različitim mogućim znakovima podudaranje jednog znaka na položaju u odnosu na druge u meti. Dakle, uglate zagrade sadrže skup znakova, od kojih se jedan podudara za podniz. Konačno, to je potpuni podniz koji se podudara.
Raspon likova
U gornjem kodu [cbr] je klasa. Čak i ako 'c' ili 'b' ili 'r' odgovara jednom znaku, ako se nakon toga odmah ne podudara, uzorak neće ništa odgovarati.
Pa, postoje određeni rasponi koji će činiti klasu. Na primjer, 0 do 9 znamenki čine klasu, [0-9] s uključenim 0 i 9. Mala slova 'a' do 'z' tvore klasu [a-z] s uključenim 'a' i 'z'. Velika slova 'A' do 'Z' tvore klasu [A-Z] s uključenim 'A' i 'Z'. Iz klase je to jedan od znakova koji bi odgovarao jednom znaku u nizu.
Sljedeći kôd proizvodi podudaranje:
ako [[ 'ID8id'= ~[0-9] ]];zatimizbacitipronađeno
biti
Ovaj put cilj je doslovni niz u stanju. 8, koji je jedan od mogućih brojeva unutar raspona, [0-9], podudara se s 8 u nizu, 'ID8id'. Gornji kôd ekvivalentan je:
ako [[ 'ID8id'= ~[0123456789] ]];zatimizbacitipronađeno
biti
Ovdje su svi mogući brojevi zapisani u uzorku, tako da nema crtice.
U sljedećem kodu dobiveno je podudaranje:
ako [[ 'ID8iD'= ~[a-z] ]];zatimizbacitipronađeno
biti
Podudaranje je između malih 'i' raspona, [a-z] i malih 'i' ciljnog niza, 'ID8iD'.
Upamtite: raspon je klasa. Klasa može biti dio većeg uzorka. Dakle, u uzorku, tekst može biti ispred i/ili poslije nastave. Sljedeći kod to ilustrira:
ako [[ 'ID8id je identifikator'= ~ ID[0-9]iskaznica ]];zatimizbacitipronađeno
biti
Izlaz je: pronađen. 'ID8id' iz uzorka podudara se s 'ID8id' u ciljnom nizu.
Negacija
Podudaranje se ne dobiva iz sljedećeg koda:
ako [[ '0123456789101112'= ~[^0-9] ]];zatimizbacitipronađeno
drugo
izbacitinije pronađeno
biti
Izlaz je:
nije pronađeno
Bez ^ ispred raspona, unutar uglatih zagrada, nula raspona odgovarala bi prvoj nuli ciljnog niza. Dakle, ^ ispred raspona (ili izbornih znakova) negira klasu.
Sljedeći kôd proizvodi podudaranje jer uvjet glasi: podudarajte se s bilo kojim znamenkovitim znakom bilo gdje u cilju:
ako [[ 'ABCDEFGHIJ'= ~[^0-9] ]];zatimizbacitipronađeno
drugo
izbacitinije pronađeno
biti
Dakle izlaz je: found.
[^0-9] znači necifreno, pa je [^0-9] negacija [0-9].
[^a-z] znači malo slovo, pa je [^a-z] negacija [a-z].
[^A-Z] znači veliko slovo, pa je [^A-Z] negacija [A-Z].
Dostupne su i druge negacije.
Razdoblje (.) U uzorku
Točka (.) U uzorku odgovara bilo kojem znaku, uključujući i njega samog. Uzmite u obzir sljedeći kod:
ako [[ '6759WXY.A3'= ~ 7,9 W.Y.A]];zatimizbacitipronađeno
biti
Izlaz koda je pronađen jer se drugi znakovi podudaraju. Jedna točka odgovara '5'; druga točka odgovara 'X'; a posljednja točka odgovara točki.
Podudaranje alternacije
Uzmite u obzir ovu rečenicu za ciljani niz:
U kavezu su ptice različitih vrsta.
Netko će možda htjeti znati ima li ova meta goluba, pauna ili orla. Može se koristiti sljedeći kod:
str='U kavezu su paunovi različitih vrsta.'ako [[ $ str= ~ golub|paun|orao]];zatim
izbacitipronađeno
drugo
izbacitinije pronađeno
biti
Izlaz je, pronađen. Metaznak izmjene, | je zaposlen. Mogu postojati dvije, tri, četiri i više alternativa. Ono što se podudara u ovom kodu je 'paun'.
Grupiranje
U sljedećem uzorku zagrade su korištene za grupiranje znakova:
pozornica (plesač)
Ovdje je grupa scenski plesač okružena metakarakterima (i). (plesač) je podskupina, dok je pozornica (plesač) cijela skupina. Uzmite u obzir sljedeće:
(Plesačica je odlična)
Ovdje je podgrupa ili podniz, plesač je super.
Podniz sa zajedničkim dijelovima
Dionik je osoba koja ima interes u poslu. Zamislite posao s web mjestom, udio.com. Zamislite da se jedan od sljedećih ciljnih nizova nalazi u računalu:
Web stranica, udio.com je za poslovne namjene .;
Tu je dionik .;
Dionica radi za stake.com .;
Neka bilo koji od ovih nizova bude meta. Programer će možda htjeti znati je li udjel.com ili dionik u bilo kojem ciljnom nizu. Njegov uzorak bi bio:
udio.com | dionik
koristeći izmjenu.
ulog je dva puta upisan u dvije riječi. To se može izbjeći upisivanjem uzorka na sljedeći način:
ulog (.com | držač)
.com | owner je u ovom slučaju podskupina.
Napomena: upotreba znaka izmjene u ovom slučaju. stake.com ili dionik će se i dalje pretraživati. Pronađen je izlaz sljedećeg koda:
str='Web stranica, udio.com je za poslovanje.'ako [[ $ str= ~ ulog(.s|držač) ]];zatim
izbacitipronađeno
biti
Podniz koji se ovdje podudara je stake.com.
Unaprijed definirani niz BASH_REMATCH
BASH_REMATCH je unaprijed definirani niz. Pretpostavimo da uzorak ima grupe. Cijela grupa koja se podudara ide u ćeliju za indeks 0 ovog niza. Prva podgrupa koja se podudara ide u ćeliju za indeks 1; druga podgrupa se podudara, ide u ćeliju za indeks 2 itd. Sljedeći kôd pokazuje kako se koristi ovaj niz:
str='Došao je scenski plesač.'ako [[ $ str= ~ pozornica (plesač) ]];zatim
izbacitipronađeno
biti
zaiu $ {! BASH_REMATCH [@]};čini
printf '$ {BASH_REMATCH [i]}, '
učinjeno
izbaciti
Izlaz je:
pronađeno
scenski plesač, plesač,
Cijela grupa je plesačica. Postoji samo jedna podskupina, a to je plesačica.
Napomena: prostor u uzorku je izbjegnut.
Podudaranje neovisnosti velikih/malih slova
Uparivanje, kako je gore objašnjeno, razlikuje velika i mala slova. Usklađivanje se može obaviti neovisno o slučaju. To je ilustrirano sljedećim kodom:
trgovine -snocasematchstr='Volimo dobru glazbu.'
ako [[ $ str= ~ Dobro]];zatim
izbacitipronađeno
biti
trgovine -unocasematch
Izlaz je: pronađen. Uzorak je, GoOd. Usklađeni podniz je 'dobar'. Zapazite kako je opcija nocasematch omogućena na početku segmenta koda, a onemogućena na kraju segmenta koda.
Dužina niza
Sintaksa za dobivanje duljine niza je:
$ {#PARAMETER}Primjer:
str='Volimo dobru glazbu.'izbaciti $ {# str}
Izlaz je: 19.
Smanjenje niza
Sintaksa za smanjenje niza je:
$ {PARAMETER: OFFSET}$ {PARAMETER: ZAMJENA: LENGTH}
gdje odbrojavanje za OFFSET počinje od nule.
Sljedeći primjer pokazuje kako ukloniti prvih 11 znakova niza:
str='Uvijek plešem uz dobru glazbu.'izbaciti $ {str: 10}
Izlaz je:
predanost dobroj glazbi.
Brojanje za LENGTH počinje od sljedećeg znaka. Sljedeći kôd prikazuje kako se dio u nizu može dopustiti:
str='Uvijek plešem uz dobru glazbu.'izbaciti $ {str: 10: 6}
Izlaz je:
ance t
Uklonjeno je prvih 11 znakova; dopušteno je sljedećih 6 znakova, a ostali su znakovi automatski uklonjeni.
Traži i zamijeni
Kad se pronađe podniz, može se zamijeniti drugim podnizom. Sintaksa za ovo je:
gdje=$ {PARAMETER/PATTERN/REPLACEMENT}gdje=$ {PARAMETER // UZORAK/ZAMJENA}
gdje=$ {PARAMETER/PATTERN}
gdje=$ {PARAMETER // PATTERN}
Za prvu sintaksu s jednom kosom crtom naprijed zamjenjuje se samo prvo podudaranje. Primjer:
str='U komori su štakor, šišmiš i mačka.'pravo=$ {str/[cbr] u/velika krava}
izbaciti $ str
izbaciti $ ret
Izlaz je:
U komori su štakor, šišmiš i mačka.
U komori je velika krava, šišmiš i mačka.
Za drugu sintaksu s dvostrukim crtama naprijed zamjenjuju se sva pojavljivanja podudaranja. Primjer:
str='U komori su štakor, šišmiš i mačka.'pravo=$ {str // [cbr] kod/velika krava}
izbaciti $ str
izbaciti $ ret
Izlaz je:
U komori su štakor, šišmiš i mačka.
U komori je velika krava, velika krava i velika krava.
Za treću sintaksu s jednom kosom crtom naprijed nema zamjene za prvo i jedino podudaranje.
Također, prvi pronađeni podniz je izbrisan. Primjer:
str='U komori su štakor, šišmiš i mačka.'pravo=$ {str/[cbr] u}
izbaciti $ str
izbaciti $ ret
Za četvrtu sintaksu s dvostrukim crtama naprijed nema zamjene za sva podudaranja. Također, svi pronađeni podnizovi se brišu. Primjer:
str='U komori su štakor, šišmiš i mačka.'pravo=$ {str // [cbr] u}
izbaciti $ str
izbaciti $ ret
Izlaz je:
U komori su štakor, šišmiš i mačka.
U komori se nalaze a, a i a.
Zaključak
Da biste provjerili ima li niz podniz u Bash -u, potrebno je upotrijebiti Pattern Matching. Usklađivanje uzoraka ne odvija se samo u dvostrukim zagradama uvjeta, [[. . . ]]. Također se može dogoditi u proširenju parametara, sa svojim $ {. . .}. Proširenjem parametara moguće je dobiti podniz pomoću indeksa.
Ono što je prikazano u ovom članku su najkritičnije točke u usklađivanju uzoraka. Ima još! Međutim, ono što bi čitatelj trebao dalje proučiti je proširenje naziva datoteke.