„Bash“ stygų manipuliavimo nutraukimas
Dirbant su apvalkalo scenarijais, įprasta užduotis yra skaidyti eilutę pagal skyriklį. Pavyzdžiui, apsvarstykite eilutę, kurioje yra kabliataškiais atskirti el. pašto adresai. Jei reikia apdoroti kiekvieną el. laišką atskirai, svarbu suprasti, kaip padalinti šią eilutę. Šis straipsnis padės jums įvairiais būdais tai pasiekti Bash.
Išnagrinėsime tokius sprendimus kaip „tr“ komandos naudojimas ir vidinio lauko skyriklio (IFS) manipuliavimas. Pabaigoje galėsite efektyviai tvarkyti eilučių skaidymą ir iš naujo nustatyti IFS į numatytąją reikšmę. Pasinerkime ir supaprastinkime „Bash“ scenarijų kūrimo užduotis!
komandą | apibūdinimas |
---|---|
tr | Išverčia arba ištrina simbolius. Čia naudojamas kabliataškiui pakeisti naujos eilutės simboliu, kad būtų padalinta eilutė. |
IFS | Vidinis lauko skyriklis, naudojamas padalyti eilutes pagal konkretų skirtuką Bash scenarijuose. |
read -r -a | Nuskaito įvesties eilutę ir padalija ją į masyvą. Parinktis -r neleidžia pasvirieji brūkšniai būti interpretuojami kaip pabėgimo simboliai. |
echo | Spausdina tekstą į standartinę išvestį. Naudojamas suskaidytų eilutės elementų rodymui. |
split | Perl funkcija, padalijanti eilutę į eilučių sąrašą pagal nurodytą skyriklį. |
foreach | Perl ciklo struktūra, kuri kartojasi per reikšmių sąrašą. |
Bash stygų skaidymo metodų supratimas
Pirmasis „Bash“ scenarijus parodo, kaip padalinti eilutę naudojant tr komandą. Čia mes apibrėžiame eilutę IN="bla@some.com;john@home.com" ir naudoti echo kartu su tr kabliataškio skyriklį paversti naujos eilutės ženklu. Tai efektyviai suskaido eilutę į atskiras eilutes. The for ciklas, tada kartojasi per kiekvieną eilutę, spausdindamas adresus laužtiniuose skliaustuose. Šis metodas yra paprastas ir išnaudoja galingas Unix komandų teksto apdorojimo galimybes manipuliuoti eilutėmis.
Kitas būdas yra koreguoti Internal Field Separator (IFS). Laikinai nustatant IFS į kabliataškį, eilutę galime padalyti į masyvą. Išsaugome originalą IFS į OIFS prieš keisdami, užtikrindami, kad galėsime jį atkurti vėliau. The read -r -a komanda nuskaito įvesties eilutę į masyvą, vadinamą mails2, padalydami jį pagal modifikuotą IFS. Po apdorojimo originalas IFS yra atstatytas. Šis metodas suteikia programiškesnį būdą tvarkyti eilučių skaidymą „Bash“, leidžiantį naudoti masyvus tolesniam manipuliavimui.
„Bash“ naudojimas norint padalinti eilutes skyrikliu
Bash scenarijus
#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Split string using 'tr' and iterate
mails=$(echo $IN | tr ";" "\n")
for addr in $mails; do
echo "> [$addr]"
done
# Output:
# > [bla@some.com]
# > [john@home.com]
Stygos padalijimas Bash naudojant IFS
Bash scenarijus
#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Save the original IFS
OIFS=$IFS
# Set IFS to semicolon
IFS=';'
# Split string into an array
read -r -a mails2 <<< "$IN"
# Restore the original IFS
IFS=$OIFS
# Iterate over the array
for x in "${mails2[@]}"; do
echo "> [$x]"
done
# Output:
# > [bla@some.com]
# > [john@home.com]
Python naudojimas stygų skaidymui
Python scenarijus
#!/usr/bin/env python3
# Input string
IN = "bla@some.com;john@home.com"
# Split string by semicolon
mails = IN.split(';')
# Iterate and print each element
for addr in mails:
print(f"> [{addr}]")
# Output:
# > [bla@some.com]
# > [john@home.com]
Perl naudojimas norint padalinti eilutę
Perlo scenarijus
#!/usr/bin/env perl
use strict;
use warnings;
# Input string
my $IN = "bla@some.com;john@home.com";
# Split string by semicolon
my @mails = split(';', $IN);
# Iterate and print each element
foreach my $addr (@mails) {
print "> [$addr]\n";
}
# Output:
# > [bla@some.com]
# > [john@home.com]
Išplėstinė stygų skaidymo technika Bash
Kitas galingas būdas skaidyti eilutes Bash yra naudojimas awk komandą. awk yra universali komandų eilutės programa, skirta raštų nuskaitymui ir apdorojimui. Tai gali būti ypač naudinga skaidant eilutes, nes leidžia mums apibrėžti pasirinktinius lauko skyriklius. Pavyzdžiui, galime naudoti awk -F";" '{print $1, $2}' padalyti eilutę pagal kabliataškio skyriklį ir atspausdinti atskirus komponentus. Šis metodas yra labai lankstus ir gali atlikti sudėtingesnes manipuliavimo eilutėmis užduotis, todėl jis yra vertingas įrankis Bash programuotojo įrankių rinkinyje.
Be to, cut komanda gali būti naudojama norint padalinti eilutes pagal skyriklius. The cut komanda paprastai naudojama sekcijoms ištraukti iš kiekvienos įvesties duomenų eilutės. Nurodydami skirtuką su -d parinktį ir pasirinkdami laukus su -f parinktį, galime efektyviai padalinti ir išgauti eilutės dalis. Pavyzdžiui, naudojant echo $IN | cut -d';' -f1 ištrauktų pirmąjį el. pašto adresą iš įvesties eilutės. Šie pažangūs metodai suteikia daugiau valdymo ir tikslumo atliekant manipuliavimo eilutėmis užduotis programoje „Bash“.
Dažni klausimai ir atsakymai apie stygų skaidymą Bash
- Kaip „Bash“ padalyti skirtuko eilutę?
- Galite naudoti IFS kintamasis arba tokios komandos kaip tr, awk, ir cut suskaidyti eilutes ant skyriklio.
- Kas yra IFS kintamasis Bash?
- The IFS (Vidinis lauko skyriklis) yra specialus kintamasis, apibrėžiantis simbolį (-ius), naudojamą (-ius) įvesties tekstui padalyti į žodžius arba žetonus.
- Kaip galiu iš naujo nustatyti IFS kintamasis į numatytąją vertę?
- Išsaugokite originalą IFS vertę prieš ją pakeisdami ir atkurkite po apdorojimo: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
- Ką daro tr komanda daryti eilutės skaidymą?
- The tr komanda išverčia arba ištrina simbolius. Jis gali pakeisti skyriklius naujomis eilutėmis, kad būtų padalinta eilutė: echo $IN | tr ";" "\n".
- Ar galiu padalyti eilutę į masyvą naudodamas „Bash“?
- Taip, pakeitus IFS kintamasis ir naudojamas read -r -a, galite padalyti eilutę į masyvą: read -r -a array <<< "$string".
- Kas yra awk naudojama komanda?
- awk yra komandų eilutės programa, skirta šablonų nuskaitymui ir apdorojimui. Jis gali skaidyti eilutes, nustatydamas pasirinktinius lauko skyriklius.
- Kaip veikia cut komandinis darbas?
- The cut komanda ištraukia dalis iš kiekvienos įvesties eilutės. Jis gali skaidyti eilutes, nurodydamas skyriklį ir pasirinkdamas laukus: echo $string | cut -d';' -f1.
- Kodėl vartoja IFS padeda skaidant eilutes?
- Naudojant IFS leidžia apibrėžti pasirinktinius skyriklius, skirtus eilėms skaidyti, todėl jis yra universalus įvairiems įvesties formatams.
- Ar „Bash“ galima padalyti eilutę keliais skyrikliais?
- Taip, galite naudoti derinį tr ir awk tvarkyti kelis skyriklius.
- Ar galiu naudoti sed už stygų skaidymą Bash?
- Nors sed pirmiausia yra srauto rengyklė, ją galima derinti su kitomis komandomis, pvz awk netiesiogiai skaidyti stygas.
Paskutinės mintys apie stygų skaidymą Bash
Įvaldę manipuliavimą eilutėmis „Bash“, galite žymiai pagerinti scenarijų kūrimo efektyvumą. Ar naudojant IFS paprastiems skirtukams ar sudėtingesniems įrankiams, pvz tr ir awk, šie metodai yra būtini efektyviam „Bash“ programavimui. Nepamirškite visada atkurti originalo IFS kad išvengtumėte netikėto elgesio scenarijuose. Naudodami šiuos metodus galite atlikti daugybę eilučių apdorojimo užduočių savo Bash scenarijuose.