„Bash Split String“ pavyzdžiai

Bash Split String Examples



Turime padalyti eilutės duomenis įvairiems programavimo tikslams. Daugelyje programavimo kalbų yra integruota funkcija, pavadinta „split“, skirta bet kokiems eilutės duomenims padalyti į kelias dalis. Tačiau „bash“ nėra įmontuotos funkcijos, skirtos eilutei padalyti. Paprastai bet kurie eilutės duomenys padalijami naudojant vieną ar kelis skirtukus. Šiame vadove parodoma, kaip galite padalyti eilutę bash, naudodami skirtingus pavyzdžius.








Naudojant kintamąjį $ IFS

Specialus apvalkalo kintamasis $ IFS yra naudojamas bash, norint padalyti eilutę į žodžius. $ IFS kintamasis vadinamas vidiniu lauko atskyrėliu (IFS), kuris naudojamas tam tikram skiriamuoju ženklu eilutei padalyti priskirti. Žodžių ribos bash identifikuojamos naudojant $ IFS. Tarpas yra numatytoji šio kintamojo ribų reikšmė. Bet kokia kita reikšmė, pvz., „ T“, „ n“, „-“ ir tt, gali būti naudojama kaip ribotuvas. Priskyrus vertę kintamajam $ IFS, eilutės reikšmę galima perskaityti dviem variantais. Tai yra „-r“ ir „-a“. Parinktis „-r“ naudojama perskaityti pasvirąjį brūkšnį () kaip simbolį, o ne pabėgimo simbolį, o „-a“ parinktis naudojama suskaidytiems žodžiams išsaugoti masyvo kintamajame. Eilutę galima padalyti, nenaudojant kintamojo $ IFS bash. Toliau pateiktuose pavyzdžiuose pateikiami skirtingi eilutės duomenų padalijimo būdai (naudojant $ IFS arba be $ IFS).



1 pavyzdys: suskaidykite eilutę pagal

Pagal numatytuosius nustatymus eilutės vertė yra padalinta iš tarpo. Sukurkite failą pavadinimu „split1.sh“ ir pridėkite šį kodą. Čia teksto kintamasis naudojamas eilutės vertei priskirti. Korpuso kintamasis $ IFS naudojamas simboliui, kuris bus naudojamas dalijant eilutės duomenis, priskirti. Šiame scenarijuje erdvė naudojama kaip separatorius. „-A“ parinktis naudojama su skaitymo komanda, norint išsaugoti suskirstytus duomenis į masyvo kintamąjį, pavadintą $ strarr. „For“ kilpa naudojama kiekvienam masyvo elementui, $ strarr, skaityti.



split1.sh





#!/bin/bash

#Nustatykite eilutės reikšmę
tekstas=„Sveiki atvykę į„ LinuxHint “

# Nustatykite erdvę kaip ribotuvą
IFS=''

#Skaitykite suskaidytus žodžius į masyvą, pagrįstą tarpo ribotuvu
skaityti strarr<<< '$ tekstas'

#Apskaičiuokite visus žodžius
išmetė 'Yra$ {#strarr [*]}žodžius tekste “.

# Spausdinkite kiekvieną masyvo vertę naudodami kilpą
dėlvalį '{strarr [@]} USD';
daryti
printf '$val n'
padaryta

Išėjimas:

Paleiskite scenarijų.



$muštisplit1.sh

Paleidus scenarijų pasirodys ši išvestis.

2 pavyzdys: padalinkite eilutę pagal tam tikrą simbolį

Bet koks konkretus simbolis gali būti naudojamas kaip skiriamasis eilutės vertės padalijimas. Sukurkite failą pavadinimu split2.sh ir pridėkite šį kodą. Čia knygos pavadinimas, autoriaus vardas ir kainos vertė pateikiami pridedant kablelį (,) kaip įvesties eilutę. Tada eilutės reikšmė padalijama ir saugoma masyve, remiantis apvalkalo kintamojo $ IFS verte. Kiekviena masyvo elementų vertė atspausdinama indekso reikšme.

split2.sh

#!/bin/bash

#Skaitykite eilutės reikšmę
išmetė „Įveskite knygos pavadinimą, autoriaus vardą ir kainą atskiriant kablelį. '
skaitytitekstas

# Nustatykite kablelį kaip ribotuvą
IFS=','

#Skaitykite suskaidytus žodžius į masyvą, pagrįstą kableliais
skaityti strarr<<< '$ tekstas'

#Atspausdinkite suskaidytus žodžius
išmetė 'Knygos pavadinimas:$ {strarr [0]}'
išmetė 'Autoriaus vardas:$ {strarr [1]}'
išmetė 'Kaina:$ {strarr [2]}'

Išėjimas:

Paleiskite scenarijų.

$muštisplit2.sh

Paleidus scenarijų pasirodys ši išvestis.

3 pavyzdys: padalinkite eilutę be kintamojo $ IFS

Šiame pavyzdyje parodyta, kaip eilutės reikšmę galima padalyti nenaudojant $ IFS bash. Sukurkite failą pavadinimu „ split3.sh “ ir pridėkite šį kodą. Pagal scenarijų teksto reikšmė su dvitaškiu (:) turi būti naudojamas kaip padalijimo indėlis. Čia eilutės duomenims padalyti naudojama komanda „readarray“ su parinktimi -d. „-D“ parinktis naudojama apibrėžti komandos atskyrimo simbolį, pvz., $ IFS. Tada „for“ kilpa naudojama masyvo elementams spausdinti.

split3.sh

#!/bin/bash

#Skaitykite pagrindinę eilutę
išmetė 'Įveskite eilutę su dvitaškiu (:), kad padalytumėte'
skaitytimainstr

#Skaldykite eilutę pagal skiriamąjį ženklą, ':'
readarray-d:-tstrarr<<< '$ mainstr'
printf ' n'

# Spausdinkite kiekvieną masyvo vertę naudodami kilpą
dėl (( n=0; n< $ {#strarr [*]}; n ++))
daryti
išmetė '{strarr [n]} USD'
padaryta

Išėjimas:

Paleiskite scenarijų.

$muštisplit3.sh

Paleidus scenarijų pasirodys ši išvestis.

4 pavyzdys: padalykite eilutę su kelių simbolių skyrikliu

Visuose ankstesniuose pavyzdžiuose eilutės reikšmė yra padalinta vienu simboliu. Šiame pavyzdyje parodyta, kaip galite padalyti eilutę naudodami kelių simbolių skyriklį. Sukurkite failą pavadinimu Laikai padalyti4.sh ir pridėkite šį kodą. Čia teksto kintamasis naudojamas eilutės duomenims saugoti. $ delimiter kintamasis naudojamas priskirti kelių simbolių duomenis, kurie naudojami kaip ribotuvas sekančiuose teiginiuose. $ myarray kintamasis naudojamas kiekvienam suskirstytam duomeniui saugoti kaip masyvo elementas. Galiausiai visi suskirstyti duomenys spausdinami naudojant ciklą „už“.

split4.sh

#!/bin/bash

#Apibrėžkite eilutę, kurią norite padalyti
tekstas='LearnHTMLlearnPHPlearnMySQLlearnJavascript'

#Nustatykite kelių simbolių ribotuvą
ribotuvas='mokytis'
#Sujunkite ribotuvą su pagrindine eilute
eilutė=$ tekstas$ atskirtuvas

#Skaldykite tekstą pagal skiriamąjį ženklą
myarray=()
tuo tarpu [[ $ eilutė ]];daryti
myarray+=( '$ {string %% '$ delimiter'*}' )
eilutė=$ {string#*'$ delimiter'}
padaryta

#Atspausdinkite žodžius po padalijimo
dėlvertėsį $ {myarray [@]}
daryti
išmetė -n '$ vertės'
padaryta
printf ' n'

Išėjimas:

Paleiskite scenarijų.

$muštisplit4.sh

Paleidus scenarijų pasirodys ši išvestis.

Išvada:

Eilutės duomenis reikia padalyti skirtingais programavimo tikslais. Šioje pamokoje pateikiami įvairūs būdai, kaip padalinti eilutės duomenis į bash. Tikimės, kad praktikuodami aukščiau pateiktus pavyzdžius, skaitytojai galės suskaidyti bet kokius eilutės duomenis pagal savo reikalavimą.

Norėdami gauti daugiau informacijos, žiūrėkite vaizdo įrašas !