Bash sadalīto virkņu piemēri

Bash Split String Examples



Mums ir jāsadala virknes dati dažādiem programmēšanas mērķiem. Daudzām programmēšanas valodām ir iebūvēta funkcija ar nosaukumu “split”, lai sadalītu virknes datus vairākās daļās. Bet bash nav iebūvētas funkcijas virknes sadalīšanai. Parasti virkņu datu sadalīšanai izmanto vienu vai vairākus atdalītājus. Kā jūs varat sadalīt virkni bash, ir parādīts šajā apmācībā, izmantojot dažādus piemērus.








$ IFS mainīgā izmantošana

Īpašais apvalka mainīgais $ IFS tiek izmantots bash, lai sadalītu virkni vārdos. $ IFS mainīgo sauc par iekšējo lauku atdalītāju (IFS), ko izmanto, lai piešķirtu konkrētu norobežotāju virknes sadalīšanai. Vārdu robežas bash identificē ar $ IFS. Baltā atstarpe ir šī mainīgā noklusējuma norobežotāja vērtība. Jebkuru citu vērtību, piemēram, “ t”, “ n”, “-” utt., Var izmantot kā norobežotāju. Pēc vērtības piešķiršanas mainīgajam $ IFS virknes vērtību var nolasīt ar divām iespējām. Tie ir “-r” un “-a”. Opcija “-r” tiek izmantota, lai lasītu slīpsvītru () kā rakstzīmi, nevis aizbēgšanas rakstzīmi, un opciju “-a” izmanto, lai saglabātu sadalītos vārdus masīva mainīgajā. Virkni var sadalīt, neizmantojot mainīgo $ IFS bash. Turpmākajos piemēros ir parādīti dažādi virkņu datu sadalīšanas veidi (ar $ IFS vai bez $ IFS).



1. piemērs: sadaliet virkni, pamatojoties uz

Virknes vērtība pēc noklusējuma ir dalīta ar atstarpi. Izveidojiet failu ar nosaukumu “split1.sh” un pievienojiet šādu kodu. Šeit teksta mainīgo izmanto, lai piešķirtu virknes vērtību. Apvalka mainīgais $ IFS tiek izmantots, lai piešķirtu rakstzīmi, kas tiks izmantota virknes datu sadalīšanai. Šajā rakstā atstarpe tiek izmantota kā atdalītājs. “-A” opcija tiek izmantota ar lasīšanas komandu, lai sadalītos ted datus saglabātu masīva mainīgajā ar nosaukumu $ strarr. Cilpa “for” tiek izmantota, lai nolasītu katru masīva elementu, $ strarr.



split1.sh





#!/bin/bash

#Definējiet virknes vērtību
teksts='Laipni lūdzam LinuxHint'

# Iestatiet atstarpi kā norobežotāju
IFS=''

#Izlasiet sadalītos vārdus masīvā, pamatojoties uz atstarpi
lasīt -uzstrarr<<< '$ teksts'

#Saskaitiet vārdu kopskaitu
izmest ārā 'Tur ir$ {#strarr [*]}vārdus tekstā ”.

# Izdrukājiet katru masīva vērtību, izmantojot cilpu
priekšstiekšā '$ {strarr [@]}';
darīt
printf '$ stundas n'
darīts

Izeja:

Palaidiet skriptu.



$bashsplit1.sh

Pēc skripta palaišanas parādīsies šāda izvade.

2. piemērs: sadaliet virkni, pamatojoties uz noteiktu rakstzīmi

Virknes vērtības sadalīšanai kā atdalītāju var izmantot jebkuru īpašu rakstzīmi. Izveidojiet failu ar nosaukumu split2.sh un pievienojiet šādu kodu. Šeit grāmatas nosaukums, autora vārds un cenas vērtība tiek iegūti, ievades virknei pievienojot komatu (,). Pēc tam virknes vērtība tiek sadalīta un saglabāta masīvā, pamatojoties uz apvalka mainīgā $ IFS vērtību. Katra masīva elementu vērtība tiek drukāta ar indeksa vērtību.

split2.sh

#!/bin/bash

#Izlasiet virknes vērtību
izmest ārā 'Ievadiet grāmatas nosaukumu, autora vārdu un cenu, atdalot komatu. '
lasītteksts

# Iestatiet komatu kā norobežotāju
IFS=','

#Izlasiet sadalītos vārdus masīvā, pamatojoties uz komatu atdalītāju
lasīt -uzstrarr<<< '$ teksts'

#Izdrukājiet sadalītos vārdus
izmest ārā 'Grāmatas nosaukums:$ {strarr [0]}'
izmest ārā 'Autora vārds:$ {strarr [1]}'
izmest ārā 'Cena:$ {strarr [2]}'

Izeja:

Palaidiet skriptu.

$bashsplit2.sh

Pēc skripta palaišanas parādīsies šāda izvade.

3. piemērs: sadaliet virkni bez $ IFS mainīgā

Šis piemērs parāda, kā virknes vērtību var sadalīt, neizmantojot $ IFS bash. Izveidojiet failu ar nosaukumu ' split3.sh ' un pievienojiet šādu kodu. Saskaņā ar skriptu teksta vērtība ar kolu (:) ir jāizmanto kā ieguldījums sadalīšanai. Šeit virknes datu sadalīšanai tiek izmantota komanda “readarray” ar opciju -d. Opcija “-d” tiek izmantota, lai komandā definētu atdalītāja rakstzīmi, piemēram, $ IFS. Tālāk cilpa “for” tiek izmantota, lai drukātu masīva elementus.

split3.sh

#!/bin/bash

#Izlasiet galveno virkni
izmest ārā 'Ievadiet virkni ar kolu (:), lai sadalītu'
lasītmainstr

#Sadaliet virkni, pamatojoties uz norobežotāju, ':'
readarray-d:-tstrarr<<< '$ mainstr'
printf ' n'

# Izdrukājiet katru masīva vērtību, izmantojot cilpu
priekš (( n=0; n< $ {#strarr [*]}; n ++))
darīt
izmest ārā '$ {strarr [n]}'
darīts

Izeja:

Palaidiet skriptu.

$bashsplit3.sh

Pēc skripta palaišanas parādīsies šāda izvade.

4. piemērs. Sadaliet virkni ar vairāku rakstzīmju atdalītāju

Virknes vērtība visos iepriekšējos piemēros ir sadalīta ar vienu rakstzīmju atdalītāju. Kā jūs varat sadalīt virkni, izmantojot vairāku rakstzīmju atdalītāju, ir parādīts šajā piemērā. Izveidojiet failu ar nosaukumu Laiki sadalīti4.sh un pievienojiet šādu kodu. Šeit teksta mainīgais tiek izmantots virknes datu glabāšanai. $ delimiter mainīgo izmanto, lai piešķirtu vairāku rakstzīmju datus, kas tiek izmantoti kā norobežotājs nākamajos paziņojumos. Mainīgo $ myarray izmanto, lai uzglabātu katru sadalītu ted datu kā masīva elementu. Visbeidzot, visi sadalītie dati tiek izdrukāti, izmantojot cilni “for”.

split4.sh

#!/bin/bash

#Nosakiet virkni sadalīšanai
teksts='LearnHTMLlearnPHPlearnMySQLlearnJavascript'

#Noteikt daudzzīmju norobežotāju
norobežotājs='mācīties'
#Saspiediet norobežotāju ar galveno virkni
virkne=$ teksts$ norobežotājs

#Sadaliet tekstu, pamatojoties uz norobežotāju
myarray=()
kamēr [[ $ virkne ]];darīt
myarray+=( '$ {string %% '$ delimiter'*}' )
virkne=$ {string#*'$ delimiter'}
darīts

#Izdrukājiet vārdus pēc sadalīšanas
priekšvērtībuiekšā $ {myarray [@]}
darīt
izmest ārā -n '$ vērtība'
darīts
printf ' n'

Izeja:

Palaidiet skriptu.

$bashsplit4.sh

Pēc skripta palaišanas parādīsies šāda izvade.

Secinājums:

Virknes dati ir jāsadala dažādiem programmēšanas mērķiem. Šajā apmācībā ir parādīti dažādi veidi, kā sadalīt virknes datus bash. Ceru, ka pēc iepriekš minēto piemēru izmantošanas lasītāji varēs sadalīt visus virkņu datus, pamatojoties uz viņu prasībām.

Lai iegūtu vairāk informācijas, skatieties video !