Како проверити да ли низ садржи подниз у басху

How Check If String Contains Substring Bash



Питање је, како проверити да ли низ садржи подниз у Басху. Одговор је: користите Паттерн Матцхинг. Ово доводи до још једног питања, а то је: шта је Узорковање? Па, израз у реченици има одређене карактеристике. Зато се разликује од других фраза у истој реченици или у другим реченицама. Карактеристике се могу кодирати као образац. На тај начин се може идентификовати одређена фраза у низу. У овом чланку је објашњено како идентификовати одређени подниз у већем низу, заменити подниз усклађен са другим поднизом и лоцирати било који подниз у већем низу по индексу. Међутим, пре него што уђемо у објашњења, морамо се присетити различитих начина на који се низ успоставља у Басху.

Стринг би Есцапинг Спацес

Низ се може конструисати заменом сваког размака секвенцом за избегавање размака, ''; као у:







миВар= Туризам у Египат је једна од земље 'с водеће економске индустрије.
Избацио $ миВар

Излаз је:



Туризам у Египту једна је од водећих привредних грана у земљи.



Напомена: апостроф је такође користио низ за размак.





Стринг би Сингле Куотес

Да ли програмер има времена да избегне све размаке у низу? Не. Стога је боље користити два појединачна наводника за разграничење низа; као такав:

миВар=„Туризам у Египту једна је од земаља“ 'водеће економске индустрије. '

Низ са једним наводником не дозвољава проширење (замену са својим ефектом) било које ескадрирајуће секвенце. Срећом, ако су два низа кодирана један поред другог, они ће се узети као један низ. Излаз у низу се може уметнути између, као што је горе урађено. Низ за бекство би се проширио. Тако излаз постаје:



Туризам у Египту једна је од водећих привредних грана у земљи.

Стринг би Доубле Куотес

Двоструким наводницима се ни ескапцијске секвенце не проширују, већ се проширују варијабле. Следећи код то илуструје:

миВар= Туризам у Египат је једна од земље 'с водеће економске индустрије.
Избацио $ миВар

Излаз је:

Туризам у Египту једна је од водећих привредних грана у земљи.

Напомена: апостроф је такође користио низ за размак.

У овом чланку, главна врста стринга који се разматра је низ у једноструким наводницима.

Основе регуларног израза

Регек

Размотрите овај низ:

Овај свет није наш дом.

Нека свет буде подврста интереса. Затим се велики низ (цео низ) назива циљним низом или једноставно, метом. „Свет“ под наводницима назива се регуларни израз или једноставно регекс. Садржај, свет, у овом случају је образац.

Једноставно подударање

У следећем коду, ако се реч „свет“ нађе у мети, рекли бисмо да је реч упарена.

п='Овај свет није наш дом.'
рег='свет'
ако [[ $ стр= ~$ рег ]];онда
Избационашао
елсе
Избационије пронађен
бити

= ~, који је оператор додељивања иза кога следи ~, назива се оператор везивања. Услов проверава да ли се образац подудара у циљном низу. Ако се у циљу нађе подниз који одговара обрасцу, наредба ецхо приказује пронађено. Ако није пронађен, ецхо исказ није пронађен. Излаз за овај код је:

нашао

Док се образац, свет, налази у мети. Имајте на уму да је размак између [[и пре]] задржан.

Шаблон

У горњем коду, „свет“ под наводницима је регекс, док је сам свет узорак. Ово је јасан образац. Међутим, већина образаца није тако једноставна. Узорак је карактеризација подниза који се може пронаћи. И тако, Басх образац користи одређене метакарактере. Метакарактер је лик о другим ликовима. На пример, Басх Паттерн користи следеће метазнакове:

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

Регуларни израз се такође може уписати у двоструким заградама услова. Али не мора бити под наводницима. Дакле, у овом случају то је дословно образац.

Класе ликова

Угласте заграде

Пронађен је излаз следећег кода, што значи да се догодило подударање:

п='Мачка је ушла у одају.'
ако [[ $ стр= ~[цбр]ат]];онда
Избационашао
бити

Узорак, [цбр] ат има одговарајућу мачку, која почиње са „ц“, а наставља се и завршава са. [цбр] у значи, подударајте се са „ц“ или „б“ или „р“ након чега следи.

Пронађен је излаз следећег кода, што значи да се догодило подударање:

п='Слепи миш је ушао у комору.'
ако [[ $ стр= ~[цбр]ат]];онда
Избационашао
бити

Узорак, [цбр] ат има подударање слепог миша, који почиње са „б“, а који се наставља и завршава са. [цбр] у значи, подударајте се са „ц“ или „б“ или „р“ након чега следи.

Пронађен је излаз следећег кода, што значи да се догодило подударање:

п='Пацов је ушао у одају.'
ако [[ $ стр= ~[цбр]ат]];онда
Избационашао
бити

Узорак, [цбр] ат има пацова који се подудара, који почиње са „р“, а наставља се и завршава са.

У горњим узорцима кода, програмер не зна да ли у циљном низу постоје мачка, слепи миш или пацов. Али, он зна да подниз почиње са „ц“ или „б“ или „р“, па се наставља и завршава са. Угласте заграде у шаблону омогућавају да се различити могући знакови подударају са једним знаком на позицији у односу на друге у мети. Дакле, угласте заграде садрже скуп знакова, од којих се један подудара за подниз. Коначно, комплетан подниз је усклађен.

Распон ликова

У горњем коду [цбр] је класа. Чак и ако „ц“ или „б“ или „р“ одговара једном знаку, ако се након тога одмах не подудара, образац неће одговарати ничему.

Па, постоје одређени распони који ће формирати класу. На пример, 0 до 9 цифара чине класу, [0-9] са укљученим 0 и 9. Мала слова „а“ до „з“ чине класу [а-з] са укљученим „а“ и „з“. Велика слова „А“ до „З“ чине класу [А-З] са укљученим „А“ и „З“. Из класе, то је један од знакова који би одговарао једном знаку у низу.

Следећи код производи подударање:

ако [[ 'ИД8ид'= ~[0-9] ]];онда
Избационашао
бити

Овај пут је циљ дословни низ у стању. 8, који је један од могућих бројева у опсегу, [0-9], подудара се са 8 у низу „ИД8ид“. Горњи код је еквивалентан:

ако [[ 'ИД8ид'= ~[0123456789] ]];онда
Избационашао
бити

Овде су сви могући бројеви записани у обрасцу, тако да нема цртице.

У следећем коду добија се подударање:

ако [[ 'ИД8иД'= ~[а-з] ]];онда
Избационашао
бити

Подударање је између малих слова „и“ опсега, [а-з] и малих слова „и“ циљног низа, „ИД8иД“.

Запамтите: опсег је класа. Час може бити део већег узорка. Дакле, у обрасцу, текст може бити испред и/или после часа. Следећи код то илуструје:

ако [[ 'ИД8ид је идентификатор'= ~ ИД[0-9]ид ]];онда
Избационашао
бити

Излаз је: пронађен. „ИД8ид“ из узорка се подудара са „ИД8ид“ у циљном низу.

Негација

Подударање се не добија из следећег кода:

ако [[ '0123456789101112'= ~[^0-9] ]];онда
Избационашао
елсе
Избационије пронађен
бити

Излаз је:

није пронађен

Без ^ испред опсега, у угластим заградама, нула опсега би одговарала првој нули циљног низа. Дакле, ^ испред опсега (или опционалних знакова) негира класу.

Следећи код производи подударање јер услов гласи: подударајте се са било којим нецифреним знаком било где у циљу:

ако [[ 'АБЦДЕФГХИЈ'= ~[^0-9] ]];онда
Избационашао
елсе
Избационије пронађен
бити

Дакле излаз је: фоунд.

[^0-9] значи нецифрен број, па је [^0-9] негација [0-9].

[^а-з] значи не-мала слова, па је [^а-з] негација [а-з].

[^А-З] значи велико слово, па је [^А-З] негација [А-З].

Доступне су и друге негације.

Период (.) У обрасцу

Тачка (.) У узорку одговара било ком знаку, укључујући и њега самог. Узмите у обзир следећи код:

ако [[ '6759ВКСИ.А3'= ~ 7.9В.И.А]];онда
Избационашао
бити

Излаз кода је пронађен јер се други знакови подударају. Једна тачка одговара „5“; друга тачка одговара „Кс“; а последња тачка одговара тачки.

Матцхинг Алтернатион

Размислите о овој реченици за циљни низ:

У кавезу су птице различитих врста.

Неко би могао знати да ли ова мета има голуба, пауна или орла. Може се користити следећи код:

п='У кавезу су паунови различитих врста.'
ако [[ $ стр= ~ голуб|паун|орао]];онда
Избационашао
елсе
Избационије пронађен
бити

Излаз је, пронађен. Метакарактер алтернације, | је запослен. Могу постојати две, три, четири и више алтернатива. Оно што се подудара у овом коду је „паун“.

Груписање

У следећем обрасцу, заграде су коришћене за груписање знакова:

позорница (плесач)

Група овде је сценски плесач окружен метакарактерима (и). (плесач) је подгрупа, док је позорница (плесач) цела група. Узмите у обзир следеће:

(Плесачица је одлична)

Овде, подгрупа или подниз је, плесач је одличан.

Подниз са заједничким деловима

Заинтересована страна је особа са интересовањем за посао. Замислите посао са веб локацијом, стаке.цом. Замислите да се један од следећих циљних низова налази у рачунару:

Веб локација, стаке.цом је за пословне сврхе .;

Постоји заинтересована страна .;

Заинтересована страна ради за стаке.цом .;

Нека било који од ових низова буде мета. Програмер ће можда желети да сазна да ли се стак.цом или заинтересована страна налазе у било ком циљном низу. Његов образац би био:

стаке.цом | стејкхолдер

користећи алтернацију.

улог је два пута откуцан са две речи. Ово се може избећи уписивањем обрасца на следећи начин:

улог (.цом | држач)

.цом | овнер је у овом случају подгрупа.

Напомена: употреба алтернативног карактера у овом случају. стаке.цом или заинтересоване стране ће се и даље претраживати. Пронађен је излаз следећег кода:

п='Веб локација ,.цом.цом је за посао.'
ако [[ $ стр= ~ улог(.са|држач) ]];онда
Избационашао
бити

Подниз који се овде подудара је удео.цом.

Унапред дефинисани низ БАСХ_РЕМАТЦХ

БАСХ_РЕМАТЦХ је унапред дефинисан низ. Претпоставимо да узорак има групе. Цела група која се подудара иде у ћелију за индекс 0 овог низа. Прва подгрупа која се подудара иде у ћелију за индекс 1; друга подгрупа се подудара, иде у ћелију за индекс 2 итд. Следећи код показује како се користи овај низ:

п='Дошао је сценски плесач.'
ако [[ $ стр= ~ позорница (плесач) ]];онда
Избационашао
бити

заиу $ {! БАСХ_РЕМАТЦХ [@]};урадити
принтф '$ {БАСХ_РЕМАТЦХ [и]}, '
Готово
Избацио

Излаз је:

нашао
сценски плесач, плесач,

Цела група је сценски плесач. Постоји само једна подгрупа, а то је плесачица.

Напомена: простор у обрасцу је избегнут.

Подударање независности великих/малих слова

Упаривање, како је горе објашњено, разликује мала и велика слова. Усклађивање се може обавити независно од случаја. Ово је илустровано у следећем коду:

продавнице ноцасематцх

п='Волимо добру музику.'
ако [[ $ стр= ~ ГоОд]];онда
Избационашао
бити

продавнице ноцасематцх

Излаз је: пронађен. Узорак је, ГоОд. Подврста која се подудара је „добра“. Обратите пажњу на то како је опција ноцасематцх омогућена на почетку сегмента кода, а онемогућена на крају сегмента кода.

Дужина низа

Синтакса за добијање дужине низа је:

$ {#ПАРАМЕТЕР}

Пример:

п='Волимо добру музику.'
Избацио $ {# стр}

Излаз је: 19.

Редукција низа

Синтакса за смањење низа је:

$ {ПАРАМЕТЕР: ОФФСЕТ}
$ {ПАРАМЕТЕР: ОДМЕТ: ЛЕНГТХ}

где бројање за ОФФСЕТ почиње од нуле.

Следећи пример показује како уклонити првих 11 знакова низа:

п='Увек плешем уз добру музику.'
Избацио $ {стр: 10}

Излаз је:

предавање доброј музици.

Бројање за ДУЖИНУ почиње од следећег знака. Следећи код приказује како се део у низу може дозволити:

п='Увек плешем уз добру музику.'
Избацио $ {стр: 10: 6}

Излаз је:

анце т

Уклоњено је првих 11 знакова; дозвољено је следећих 6 знакова, а остали знакови су аутоматски уклоњени.

Тражи и замени

Када се пронађе подниз, може се заменити другим поднизом. Синтакса за ово је:

где=$ {ПАРАМЕТЕР/ПАТТЕРН/РЕПЛАЦЕМЕНТ}
где=$ {ПАРАМЕТЕР // УЗОРАК/ЗАМЕНА}
где=$ {ПАРАМЕТЕР/ПАТТЕРН}
где=$ {ПАРАМЕТЕР // ПАТТЕРН}

За прву синтаксу са једном косом цртом напред, замењује се само прво подударање. Пример:

п='У комори су пацов, шишмиш и мачка.'
јел тако=$ {стр/[цбр] ат/велика крава}
Избацио $ стр
Избацио $ рет

Излаз је:

У комори су пацов, шишмиш и мачка.
У комори је велика крава, шишмиш и мачка.

За другу синтаксу са двоструким косим цртама, све појаве подударања се замењују. Пример:

п='У комори су пацов, шишмиш и мачка.'
јел тако=$ {стр // [цбр] ат/велика крава}
Избацио $ стр
Избацио $ рет

Излаз је:

У комори су пацов, шишмиш и мачка.
У комори је велика крава, велика крава и велика крава.

За трећу синтаксу са једном косом цртом унапред нема замене за прво и једино подударање.

Такође, први пронађени подниз је избрисан. Пример:

п='У комори су пацов, шишмиш и мачка.'
јел тако=$ {стр/[цбр] у}
Избацио $ стр
Избацио $ рет

За четврту синтаксу са двоструким косим цртама унапред нема замене за сва подударања. Такође, сви пронађени поднизови се бришу. Пример:

п='У комори су пацов, шишмиш и мачка.'
јел тако=$ {стр // [цбр] у}
Избацио $ стр
Избацио $ рет

Излаз је:

У комори су пацов, шишмиш и мачка.
У комори се налазе а, а и а.

Закључак

Да би се проверило да ли низ има подниз у Басх -у, мора се користити подударање узорка. Подударање узорка не одвија се само у двоструким заградама услова, [[. . . ]]. Такође се може десити у проширењу параметара, са својим $ {. . .}. Проширењем параметара могуће је добити подниз помоћу индекса.

Оно што је представљено у овом чланку су најкритичније тачке у усклађивању узорака. Постоји више! Међутим, оно што би читалац требало да проучи је проширење назива датотеке.