String Manipulation rikkominen Bashissa
Shell-skriptien kanssa työskenneltäessä yleinen tehtävä on jakaa merkkijono erottimen perusteella. Harkitse esimerkiksi merkkijonoa, joka sisältää puolipisteillä erotetut sähköpostiosoitteet. Jos sinun on käsiteltävä jokainen sähköposti yksitellen, tämän merkkijonon jakamisen ymmärtäminen on välttämätöntä. Tämä artikkeli opastaa sinua eri tavoilla saavuttaa tämä Bashissa.
Tutkimme ratkaisuja, kuten tr-komennon käyttöä ja IFS:n (Internal Field Separator) käsittelyä. Loppuun mennessä pystyt käsittelemään merkkijonojen jakamista tehokkaasti ja palauttamaan IFS:n oletusarvoonsa. Sukellaan ja yksinkertaistetaan Bash-skriptitehtäviäsi!
Komento | Kuvaus |
---|---|
tr | Kääntää tai poistaa merkkejä. Käytetään tässä korvaamaan puolipiste rivinvaihdolla merkkijonon jakamiseksi. |
IFS | Sisäinen kenttäerotin, jota käytetään jakamaan merkkijonoja Bash-skriptien tietyn erottimen perusteella. |
read -r -a | Lukee syötteen rivin ja jakaa sen taulukkoon. Vaihtoehto -r estää kenoviivaa tulkitsemasta estomerkkejä. |
echo | Tulostaa tekstin vakiotulosteeseen. Käytetään jaettujen merkkijonoelementtien näyttämiseen. |
split | Perl-funktio, joka jakaa merkkijonon merkkijonoluetteloksi määritetyn erottimen perusteella. |
foreach | Perl-silmukkarakenne, joka toistuu arvoluettelon yli. |
Bash-merkkijonojen jakamistekniikoiden ymmärtäminen
Ensimmäinen Bash-skripti osoittaa, kuinka merkkijono jaetaan käyttämällä tr komento. Tässä määrittelemme merkkijonon IN="bla@some.com;john@home.com" ja käyttää echo kanssa tr kääntääksesi puolipisteen erottimen rivinvaihtomerkiksi. Tämä katkaisee merkkijonon tehokkaasti yksittäisiksi riveiksi. The for silmukka toistuu sitten jokaisen rivin yli ja tulostaa osoitteet hakasulkeisiin. Tämä menetelmä on yksinkertainen ja hyödyntää Unix-komentojen tehokkaita tekstinkäsittelyominaisuuksia merkkijonojen käsittelyssä.
Toinen tapa on säätää Internal Field Separator (IFS). Väliaikaisella asetuksella IFS puolipisteeseen, voimme jakaa merkkijonon taulukkoon. Tallennamme alkuperäisen IFS kohtaan OIFS ennen sen muokkaamista, jotta voimme palauttaa sen myöhemmin. The read -r -a komento lukee syötemerkkijonon taulukkoon nimeltä mails2, jakamalla sen muokatun perusteella IFS. Käsittelyn jälkeen alkuperäinen IFS on palautettu. Tämä lähestymistapa tarjoaa ohjelmallisemman tavan käsitellä merkkijonojen jakamista Bashissa, jolloin voimme käyttää taulukoita lisäkäsittelyyn.
Bashin käyttäminen erottimen merkkijonojen jakamiseen
Bash-skripti
#!/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]
Merkkijonon jakaminen Bashissa IFS:n avulla
Bash-skripti
#!/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]
Pythonin käyttäminen merkkijonojen jakamiseen
Python-skripti
#!/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]
Perlin käyttäminen merkkijonon jakamiseen
Perl Script
#!/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]
Kehittyneet merkkijonojen halkaisutekniikat bashissa
Toinen tehokas menetelmä merkkijonojen jakamiseen Bashissa on käyttää awk komento. awk on monipuolinen komentoriviohjelma, joka on suunniteltu kuvioiden skannaukseen ja käsittelyyn. Se voi olla erityisen hyödyllinen merkkijonojen jakamiseen, koska sen avulla voimme määrittää mukautettuja kenttäerottimia. Voimme käyttää esimerkiksi awk -F";" '{print $1, $2}' jakaa merkkijono puolipisteen erottimen perusteella ja tulostaa yksittäiset komponentit. Tämä menetelmä on erittäin joustava ja pystyy käsittelemään monimutkaisempia merkkijonojen käsittelytehtäviä, mikä tekee siitä arvokkaan työkalun Bash-ohjelmoijan työkalupakkissa.
Lisäksi, cut komentoa voidaan käyttää jakamaan merkkijonoja erottimien perusteella. The cut -komentoa käytetään tyypillisesti osien poimimiseen jokaiselta syötetietoriviltä. Määrittämällä erotin -d -vaihtoehto ja valitsemalla kentät -painikkeella -f -vaihtoehto, voimme tehokkaasti jakaa ja poimia osia merkkijonosta. Esimerkiksi käyttämällä echo $IN | cut -d';' -f1 poimiisi ensimmäisen sähköpostiosoitteen syöttömerkkijonosta. Nämä edistyneet menetelmät tarjoavat enemmän hallintaa ja tarkkuutta merkkijonojen käsittelyyn Bashissa.
Yleisiä kysymyksiä ja vastauksia merkkijonojen jakamisesta Bashissa
- Kuinka jaan erottimen merkkijonon Bashissa?
- Voit käyttää IFS muuttuja tai komentoja kuten tr, awk, ja cut jakaa merkkijonoja erottimella.
- Mikä on IFS muuttuja Bashissa?
- The IFS (Sisäinen kenttäerotin) on erityinen muuttuja, joka määrittää merkit, joita käytetään syötetyn tekstin jakamiseen sanoiksi tai tunnuksiksi.
- Kuinka voin nollata IFS muuttuja oletusarvoonsa?
- Tallenna alkuperäinen IFS arvo ennen sen muuttamista ja palauta se käsittelyn jälkeen: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
- Mitä tekee tr komento tehdä merkkijonojen jakamisessa?
- The tr komento kääntää tai poistaa merkkejä. Se voi korvata erottimet rivinvaihdoilla merkkijonon jakamiseksi: echo $IN | tr ";" "\n".
- Voinko jakaa merkkijonon taulukoksi Bashilla?
- Kyllä, vaihtamalla IFS muuttuva ja käyttävä read -r -a, voit jakaa merkkijonon taulukkoon: read -r -a array <<< "$string".
- Mikä on awk komentoa käytetään?
- awk on komentorivityökalu kuvioiden skannaukseen ja käsittelyyn. Se voi jakaa merkkijonoja määrittämällä mukautettuja kenttäerottimia.
- Kuinka toimii cut komentotyö?
- The cut komento poimii osia jokaiselta syöttöriviltä. Se voi jakaa merkkijonoja määrittämällä erottimen ja valitsemalla kentät: echo $string | cut -d';' -f1.
- Miksi käyttää IFS apua merkkijonojen jakamisessa?
- Käyttämällä IFS avulla voit määrittää mukautettuja erottimia merkkijonojen jakamiseen, mikä tekee siitä monipuolisen eri syöttömuodoille.
- Onko mahdollista jakaa merkkijono useilla erottimilla Bashissa?
- Kyllä, voit käyttää yhdistelmää tr ja awk käsitellä useita erottimia.
- Voinko käyttää sed merkkijonojen jakamiseen bashissa?
- Sillä aikaa sed on ensisijaisesti stream-editori, se voidaan yhdistää muihin komentoihin, kuten awk jakaa merkkijonoja epäsuorasti.
Viimeiset ajatukset kielten halkeamisesta bashissa
Merkkijonojen manipuloinnin hallitseminen Bashissa voi merkittävästi parantaa komentosarjojen tehokkuutta. Onko käytössä IFS yksinkertaisille erottimille tai edistyneemmille työkaluille, kuten tr ja awk, nämä tekniikat ovat välttämättömiä tehokkaan Bash-ohjelmoinnin kannalta. Muista aina palauttaa alkuperäinen IFS välttääksesi odottamattoman toiminnan skriptissäsi. Näillä menetelmillä voit käsitellä laajan valikoiman merkkijonojen käsittelytehtäviä Bash-skripteissäsi.