Cadena escapant espais
Es pot construir una cadena substituint cada espai per la seqüència d'escapament de l'espai, ''; com a:
myVar= Turisme dins Egipte és un del país 's indústries líders econòmiques.
trobo $ myVar
La sortida és:
El turisme a Egipte és una de les principals indústries econòmiques del país.
Nota: l'apòstrof també va utilitzar la seqüència d'escapament espacial.
Cadena per cites senzilles
El programador té temps per escapar de tots els espais d’una cadena? No, per tant, és millor utilitzar dues cometes simples per delimitar una cadena; tal com:
myVar='El turisme a Egipte és un dels països' 'les principals indústries econòmiques. 'Una cadena entre cometes no permet l'expansió (substituint-la pel seu efecte) de cap seqüència d'escapament. Afortunadament, si es codifiquen dues cadenes una al costat de l’altra, es prendran com una cadena. Es pot inserir una seqüència d'escapament pel mig, tal com es va fer més amunt. La seqüència d’escapament s’ampliaria. Així doncs, la sortida es converteix en:
El turisme a Egipte és una de les principals indústries econòmiques del país.
Cadena de cites dobles
Amb les cometes dobles, les seqüències d’escapament no s’amplien també, sinó que s’amplien les variables. El següent codi ho il·lustra:
myVar= Turisme dins Egipte és un del país 's indústries líders econòmiques.trobo $ myVar
La sortida és:
El turisme a Egipte és una de les principals indústries econòmiques del país.
Nota: l'apòstrof també va utilitzar la seqüència d'escapament espacial.
En aquest article, el tipus principal de cadena que es considera és la cadena entre cometes simples.
Fonaments d’expressió regular
Regex
Penseu en aquesta cadena:
Aquest món no és realment casa nostra.
Que el món sigui la cadena d’interès. Llavors, la cadena gran (cadena sencera) s’anomena cadena de destinació o simplement, la destinació. El ‘món’ entre cometes s’anomena expressió regular o, simplement, l’expressió regular. El contingut, el món, és el patró, en aquest cas.
Coincidència simple
Al codi següent, si la paraula 'món' es troba a l'objectiu, diríem que la paraula s'ha coincidit.
pàg='Aquest món no és realment casa nostra'.reg='món'
si [[ $ str= ~$ reg ]];llavors
trobotrobat
en cas contrari
trobono trobat
ser
= ~, que és l'operador d'assignació seguit de ~, s'anomena operador d'enllaç. La condició comprova si el patró coincideix amb la cadena de destinació. Si es troba una sub cadena corresponent al patró a l'objectiu, es mostrarà la sentència echo. Si no es troba, la declaració de ressò no es troba. La sortida d’aquest codi és:
trobat
Com que el patró, el món, es troba a l'objectiu. Tingueu en compte que s'ha mantingut l'espai delimitant després de [[i abans]].
Patró
Al codi anterior, 'món' entre cometes és l'expressió regular, mentre que el món mateix és el patró. Aquest és un patró senzill. No obstant això, la majoria de patrons no són tan senzills. Un patró és una caracterització d'una subcadena que es troba. Per tant, el patró Bash utilitza certs metacaracters. Un metacaracter és un personatge sobre altres personatges. Per exemple, Bash Pattern utilitza els següents metacaràcters:
^ $ . * +? () [] {} |
També es pot escriure una expressió regular entre claudàtors dobles. Però no ha de ser entre cometes. Per tant, en aquest cas, és literalment un patró.
Classes de personatges
Claudàtors
Es troba la sortida del codi següent, és a dir, es produeix una coincidència:
pàg=El gat va entrar a la cambra.si [[ $ str= ~[cbr]a]];llavors
trobotrobat
ser
El patró, [cbr] at, ha coincidit amb el gat, que comença amb ‘c’, i que continua i acaba amb a. [cbr] a significa, coincideix amb 'c' o 'b' o 'r' seguit de a.
Es troba la sortida del codi següent, és a dir, es produeix una coincidència:
pàg=—El ratpenat va entrar a la cambra.si [[ $ str= ~[cbr]a]];llavors
trobotrobat
ser
El patró, [cbr] at, ha coincidit amb bat, que comença per ‘b’, i que continua i acaba amb a. [cbr] a significa, coincideix amb 'c' o 'b' o 'r' seguit de a.
Es troba la sortida del codi següent, és a dir, es produeix una coincidència:
pàg=La rata va entrar a la cambra.si [[ $ str= ~[cbr]a]];llavors
trobotrobat
ser
El patró, [cbr] at ha coincidit amb la rata, que comença per ‘r’, i que continua i acaba amb a.
Als exemples de codi anteriors, el programador no sap si hi ha gat o ratpenat o rata a la cadena de destinació. Però sap que la subcadena comença per «c» o per «b» o per «r», després continua i acaba amb a. Els claudàtors d'un patró permeten a diferents personatges possibles fer coincidir un personatge en una posició en relació amb els altres de l'objectiu. Per tant, els claudàtors contenen un conjunt de caràcters, dels quals un coincideix amb una subcadena. Finalment, és la subcadena completa que es fa coincidir.
Gamma de personatges
Al codi anterior [cbr] hi ha una classe. Fins i tot si ‘c’ o ‘b’ o ‘r’ corresponen a un sol caràcter, si a continuació no coincideix, el patró no coincidirà amb res.
Bé, hi ha certs rangs que formaran una classe. Per exemple, de 0 a 9 dígits formen la classe, [0-9] amb 0 i 9 inclosos. Les minúscules «a» a «z» formen la classe [a-z] amb «a» i «z» incloses. Les majúscules 'A' a 'Z' formen la classe [A-Z] amb 'A' i 'Z' incloses. D’una classe, és un dels caràcters que coincideix amb un caràcter de la cadena.
El codi següent produeix una coincidència:
si [[ 'ID8id'= ~[0-9] ]];llavorstrobotrobat
ser
Aquesta vegada l'objectiu és una cadena literal en la condició. 8, que és un dels números possibles dins de l'interval, [0-9], ha coincidit amb 8 a la cadena 'ID8id'. El codi anterior equival a:
si [[ 'ID8id'= ~[0123456789] ]];llavorstrobotrobat
ser
Aquí, tots els números possibles s’han escrit al patró, de manera que no hi ha guionet.
Al codi següent s’obté una coincidència:
si [[ 'ID8iD'= ~[a-z] ]];llavorstrobotrobat
ser
La coincidència es troba entre la minúscula 'i' de l'interval, [a-z], i la minúscula 'i' de la cadena de destinació, 'ID8iD'.
Recordeu: el rang és una classe. La classe pot formar part d’un patró més gran. Per tant, en un patró, el text pot estar al davant i / o després de la classe. El següent codi ho il·lustra:
si [[ 'ID8id és l'identificador'= ~ ID[0-9]identificador ]];llavorstrobotrobat
ser
La sortida és: trobada. 'ID8id' del patró coincideix amb 'ID8id' a la cadena de destinació.
Negació
La coincidència no s’obté del codi següent:
si [[ '0123456789101112'= ~[^0-9] ]];llavorstrobotrobat
en cas contrari
trobono trobat
ser
La sortida és:
no trobat
Sense ^ davant de l'interval, dins dels claudàtors, el zero de l'interval hauria coincidit amb el primer zero de la cadena objectiu. Per tant, ^ davant d'un interval (o caràcters opcionals) nega la classe.
El codi següent produeix una coincidència perquè la condició es llegeix: coincideix amb qualsevol caràcter que no sigui de dígits en qualsevol lloc de l'objectiu:
si [[ 'ABCDEFGHIJ'= ~[^0-9] ]];llavorstrobotrobat
en cas contrari
trobono trobat
ser
Així doncs, la sortida és: trobada.
[^ 0-9] significa un no-dígit, de manera que [^ 0-9] és la negació de [0-9].
[^ a-z] significa una lletra no minúscula, de manera que [^ a-z] és la negació de [a-z].
[^ A-Z] significa una lletra no majúscula, de manera que [^ A-Z] és la negació de [A-Z].
Hi ha altres negacions disponibles.
El període (.) Al patró
El punt (.) Del patró coincideix amb qualsevol caràcter inclòs ell mateix. Penseu en el codi següent:
si [[ '6759WXY.A3'= ~ 7.9W.Y.A]];llavorstrobotrobat
ser
La sortida del codi es troba perquè els altres caràcters coincideixen. Un punt coincideix amb '5'; un altre punt coincideix amb ‘X’; i l'últim punt coincideix amb un punt.
Alternança coincident
Penseu en aquesta frase per a una cadena de destinació:
La gàbia té aus de diferents tipus.
Algú pot voler saber si aquest objectiu té colom, paó o àguila. Es pot utilitzar el següent codi:
pàg='La gàbia té paons de diferents tipus'.si [[ $ str= ~ colom|paó|àguila]];llavors
trobotrobat
en cas contrari
trobono trobat
ser
La sortida es troba. L'alternança metacaracter, | ha estat treballat. Hi pot haver dues, tres, quatre i més alternatives. El que coincideix en aquest codi és 'paó'.
Agrupació
En el patró següent, s’han utilitzat parèntesis per agrupar caràcters:
un escenari (ballarí)
El grup aquí és un ballarí d’escena envoltat de metacaracteres (i). (ballarí) és un subgrup, mentre que un escenari (ballarí) és tot el grup. Penseu en el següent:
El (ballarí és impressionant)
Aquí, el subgrup o subcadena és, el ballarí és increïble.
Subcadenes amb parts comunes
Una part interessada és una persona interessada en un negoci. Imagineu-vos un negoci amb un lloc web, stake.com. Imagineu que una de les cadenes objectiu següents es troba a l'ordinador:
El lloc web, stake.com és per a l'empresa .;
Hi ha l'interessat .;
L'interès treballa per stake.com .;
Deixeu que qualsevol d'aquestes cadenes sigui l'objectiu. El programador pot voler saber si stake.com o stakeholder es troba en qualsevol cadena de destinació. El seu patró seria:
stake.com | stakeholder
utilitzant l’alternança.
estaca s'ha escrit dues vegades en les dues paraules. Això es pot evitar escrivint el patró de la següent manera:
estaca (.com | titular)
.com | titular és el subgrup en aquest cas.
Nota: l'ús del caràcter d'alternança en aquest cas. encara es cercarà stake.com o stakeholder. Es troba la sortida del codi següent:
pàg='El lloc web, stake.com és per a l'empresa.'si [[ $ str= ~ estaca(.amb|titular) ]];llavors
trobotrobat
ser
La subcadena coincident aquí és stake.com.
Matriu predefinida BASH_REMATCH
BASH_REMATCH és una matriu predefinida. Suposem que un patró té grups. Tot el grup coincident entra a la cel·la de l’índex 0 d’aquesta matriu. El primer subgrup coincident entra a la cel·la de l’índex 1; el segon subgrup coincideix, entra a la cel·la de l'índex 2, etc. El codi següent mostra com utilitzar aquesta matriu:
pàg='Ha vingut el ballarí escènic'.si [[ $ str= ~ etapa (ballarí) ]];llavors
trobotrobat
ser
perjodins $ {! BASH_REMATCH [@]};fer
printf '$ {BASH_REMATCH [i]}, '
fet
trobo
La sortida és:
trobat
ballarina d’escena, ballarina,
Tot el grup és ballarí d’escena. Només hi ha un subgrup, que és ballarí.
Nota: s'ha escapat l'espai del patró.
Coincidència d’independència entre majúscules i minúscules
La coincidència, tal com s’ha explicat anteriorment, distingeix entre majúscules i minúscules. La coincidència es pot fer independentment del cas. Això es mostra en el següent codi:
botigues -snocasematchpàg='Ens agrada la bona música'.
si [[ $ str= ~ GoOd]];llavors
trobotrobat
ser
botigues -unocasematch
La sortida és: trobada. El patró és GoOd. La subcadena coincident és 'bona'. Tingueu en compte com s'ha activat l'opció nocasematch al començament del segment de codi i desactivada al final del segment de codi.
Longitud d'una corda
La sintaxi per obtenir la longitud d'una cadena és:
$ {# PARAMETER}Exemple:
pàg='Ens agrada la bona música'.trobo $ {# str}
La sortida és: 19.
Reducció de cordes
Les sintaxis per a la reducció de cadenes són:
$ {PARAMETER: OFFSET}$ {PARAMETER: OFFSET: LENGTH}
on el recompte per OFFSET comença des de zero.
L'exemple següent mostra com eliminar els primers 11 caràcters d'una cadena:
pàg='Sempre ballo amb bona música'.trobo $ {str: 10}
La sortida és:
a la bona música.
Comptant per a la LONGITUD, comença a partir del següent personatge. El codi següent mostra com es pot permetre una porció dins de la cadena:
pàg='Sempre ballo amb bona música'.trobo $ {str: 10: 6}
La sortida és:
ance t
Es van eliminar els primers 11 caràcters; es van permetre els següents 6 caràcters i la resta de personatges es van eliminar automàticament.
Cerca i substitució
Quan es troba una subcadena, es pot substituir per una altra. Les sintaxis per a això són:
on=$ {PARAMETER / PATTERN / REPLACEMENT}on=$ {PARAMETER // PATTERN / REPLACEMENT}
on=$ {PARAMETER / PATTERN}
on=$ {PARAMETER // PATTERN}
Per a la primera sintaxi amb barra inclinada directa, només se substitueix la primera coincidència. Exemple:
pàg='Hi ha una rata, un ratpenat i un gat a la cambra'.dret=$ {str / [cbr] a / big cow}
trobo $ str
trobo $ ret
La sortida és:
A la cambra hi ha una rata, un ratpenat i un gat.
A la cambra hi ha una gran vaca, un ratpenat i un gat.
Per a la segona sintaxi amb barres inclinades dobles, se substitueixen totes les aparicions del partit. Exemple:
pàg='Hi ha una rata, un ratpenat i un gat a la cambra'.dret=$ {str // [cbr] a / gran vaca}
trobo $ str
trobo $ ret
La sortida és:
A la cambra hi ha una rata, un ratpenat i un gat.
A la cambra hi ha una vaca gran, una vaca gran i una vaca gran.
Per a la tercera sintaxi amb barra inclinada directa, no hi ha cap substitució per a la primera i única coincidència.
A més, se suprimeix la primera subcadena trobada. Exemple:
pàg='Hi ha una rata, un ratpenat i un gat a la cambra'.dret=$ {str / [cbr] a}
trobo $ str
trobo $ ret
Per a la quarta sintaxi amb barres inclinades dobles, no hi ha cap substitució per a tots els partits. A més, se suprimeixen totes les subcadenes trobades. Exemple:
pàg='Hi ha una rata, un ratpenat i un gat a la cambra'.dret=$ {str // [cbr] a}
trobo $ str
trobo $ ret
La sortida és:
A la cambra hi ha una rata, un ratpenat i un gat.
Hi ha un, un i un, a la cambra.
Conclusió
Per comprovar si una cadena té una subcadena a Bash, s’ha d’utilitzar la concordança de patrons. La concordança de patrons no només té lloc entre parèntesis dobles, [[. . . ]]. També pot tenir lloc en l'expansió de paràmetres, amb el seu $ {. . .}. Amb l'expansió de paràmetres, és possible obtenir una subcadena per índexs.
El que s’ha presentat en aquest article són els punts més crítics de la concordança de patrons. N’hi ha més! Tot i això, el que el lector hauria d’estudiar a continuació és Expansió del nom de fitxer.