Разбијање манипулације стринговима у Басху
Када радите са схелл скриптама, уобичајен задатак је да се стринг подели на основу граничника. На пример, узмите у обзир низ који садржи адресе е-поште раздвојене тачком и зарезом. Ако треба да обрадите сваку е-пошту појединачно, разумевање како да поделите овај низ постаје од суштинског значаја. Овај чланак ће вас водити кроз различите методе да то постигнете у Басху.
Истражићемо решења као што су коришћење команде `тр` и манипулисање унутрашњим сепаратором поља (ИФС). На крају ћете моћи ефикасно да се носите са дељењем стрингова и ресетујете ИФС на подразумевану вредност. Хајде да заронимо и поједноставимо ваше Басх задатке скриптовања!
| Цомманд | Опис |
|---|---|
| tr | Преводи или брише знакове. Овде се користи за замену тачке и зарезе знаком новог реда да би се стринг поделио. |
| IFS | Интерни сепаратор поља, који се користи за цепање стрингова на основу специфичног граничника у Басх скриптама. |
| read -r -a | Чита линију уноса и дели је у низ. Опција -р спречава да се обрнуте косе црте тумаче као излазни знакови. |
| echo | Штампа текст на стандардни излаз. Користи се за приказ подељених елемената низа. |
| split | Перл функција која дели стринг на листу стрингова на основу одређеног граничника. |
| foreach | Структура Перл петље која се понавља преко листе вредности. |
Разумевање Басх техника раздвајања стрингова
Прва Басх скрипта показује како да поделите стринг користећи tr команда. Овде дефинишемо низ IN="bla@some.com;john@home.com" и користити echo у споју са tr да преведете граничник тачке и зарез у знак новог реда. Ово ефикасно разбија стринг у појединачне линије. Тхе for петља затим прелази преко сваке линије, штампајући адресе у угластим заградама. Овај метод је једноставан и користи моћне могућности обраде текста Уник команди за манипулисање стринговима.
Друга метода укључује подешавање Internal Field Separator (IFS). Привременим постављањем IFS на тачку и зарез, можемо да поделимо стринг у низ. Чувамо оригинал IFS до OIFS пре него што га модификујемо, обезбеђујући да га касније можемо вратити. Тхе read -r -a команда чита улазни низ у низ под називом mails2, поделивши га на основу измењеног IFS. Након обраде, оригинал IFS је обновљена. Овај приступ пружа програмскији начин за руковање дељењем стрингова у Басх-у, омогућавајући нам да користимо низове за даљу манипулацију.
Коришћење Басх-а за раздвајање стрингова на граничнику
Басх Сцрипт
#!/usr/bin/env bash# Input stringIN="bla@some.com;john@home.com"# Split string using 'tr' and iteratemails=$(echo $IN | tr ";" "\n")for addr in $mails; doecho "> [$addr]"done# Output:# > [bla@some.com]# > [john@home.com]
Раздвајање стринга у Басх помоћу ИФС-а
Басх Сцрипт
#!/usr/bin/env bash# Input stringIN="bla@some.com;john@home.com"# Save the original IFSOIFS=$IFS# Set IFS to semicolonIFS=';'# Split string into an arrayread -r -a mails2 <<< "$IN"# Restore the original IFSIFS=$OIFS# Iterate over the arrayfor x in "${mails2[@]}"; doecho "> [$x]"done# Output:# > [bla@some.com]# > [john@home.com]
Коришћење Питхона за цепање стрингова
Питхон Сцрипт
#!/usr/bin/env python3# Input stringIN = "bla@some.com;john@home.com"# Split string by semicolonmails = IN.split(';')# Iterate and print each elementfor addr in mails:print(f"> [{addr}]")# Output:# > [bla@some.com]# > [john@home.com]
Коришћење Перл-а за раздвајање стринга
Перл Сцрипт
#!/usr/bin/env perluse strict;use warnings;# Input stringmy $IN = "bla@some.com;john@home.com";# Split string by semicolonmy @mails = split(';', $IN);# Iterate and print each elementforeach my $addr (@mails) {print "> [$addr]\n";}# Output:# > [bla@some.com]# > [john@home.com]
Напредне технике раздвајања низова у Басху
Још један моћан метод за раздвајање стрингова у Басх-у укључује коришћење awk команда. awk је свестрани услужни програм командне линије дизајниран за скенирање и обраду шаблона. Може бити посебно корисно за раздвајање стрингова јер нам омогућава да дефинишемо прилагођене сепараторе поља. На пример, можемо користити awk -F";" '{print $1, $2}' да бисте поделили низ на основу граничника тачке зарез и одштампали појединачне компоненте. Овај метод је веома флексибилан и може да се носи са сложенијим задацима манипулације стринговима, што га чини вредним алатом у комплету алата Басх програмера.
Поред тога, тхе cut команда се може користити за раздвајање низова на основу граничника. Тхе cut команда се обично користи за издвајање секција из сваке линије улазних података. Одређивањем граничника са -d опцију и избор поља са -f опцију, можемо ефикасно поделити и издвојити делове низа. На пример, коришћењем echo $IN | cut -d';' -f1 би издвојио прву адресу е-поште из улазног низа. Ове напредне методе пружају већу контролу и прецизност за задатке манипулације стринговима у Басх-у.
Уобичајена питања и одговори о раздвајању низова у Басху
- Како да поделим стринг на граничнику у Басху?
- Можете користити IFS променљиве или команде попут tr, awk, и cut да бисте поделили низове на граничнику.
- Шта је IFS променљива у Басху?
- Тхе IFS (Интернал Фиелд Сепаратор) је специјална променљива која дефинише карактер(е) који се користи за раздвајање уносног текста на речи или токене.
- Како могу да ресетујем IFS променљиву на своју подразумевану вредност?
- Сачувајте оригинал IFS вредност пре него што је промените и вратите је након обраде: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
- Шта значи tr наредба уради у раздвајању низа?
- Тхе tr команда преводи или брише знакове. Може да замени граничнике са новим редовима да подели стринг: echo $IN | tr ";" "\n".
- Могу ли да поделим стринг у низ користећи Басх?
- Да, променом IFS променљива и коришћење read -r -a, можете да поделите стринг у низ: read -r -a array <<< "$string".
- Шта је awk команда се користи за?
- awk је услужни програм командне линије за скенирање и обраду шаблона. Може да подели низове дефинисањем прилагођених сепаратора поља.
- Како се cut командни рад?
- Тхе cut наредба издваја секције из сваке линије уноса. Може да подели стринг навођењем граничника и избором поља: echo $string | cut -d';' -f1.
- Зашто се користи IFS помаже у цепању низова?
- Користећи IFS омогућава вам да дефинишете прилагођене граничнике за раздвајање низова, што га чини разноврсним за различите формате уноса.
- Да ли је могуће поделити стринг са више граничника у Басху?
- Да, можете користити комбинацију tr и awk за руковање вишеструким граничницима.
- Могу ли да користим sed за цепање стрингова у Басху?
- Док sed је првенствено уређивач стримова, може се комбиновати са другим командама као што су awk да посредно подели низове.
Завршна размишљања о раздвајању низова у Басху
Савладавање манипулације стринговима у Басху може значајно побољшати вашу ефикасност скриптовања. Било да користите IFS за једноставне граничнике или напредније алате као што су tr и awk, ове технике су неопходне за ефикасно Басх програмирање. Не заборавите да увек враћате оригинал IFS да бисте избегли неочекивано понашање у вашим скриптама. Овим методама можете да се носите са широким спектром задатака обраде стрингова у вашим Басх скриптама.