Razdelitev niza na ločilo v Bashu

Razdelitev niza na ločilo v Bashu
Razdelitev niza na ločilo v Bashu

Razčlenitev manipulacije nizov v Bashu

Pri delu s skripti lupine je pogosta naloga razdelitev niza na podlagi ločila. Na primer, razmislite o nizu, ki vsebuje e-poštne naslove, ločene s podpičji. Če morate obdelati vsako e-pošto posebej, postane nujno razumevanje, kako razdeliti ta niz. Ta članek vas bo vodil skozi različne metode, kako to doseči v Bashu.

Raziskali bomo rešitve, kot je uporaba ukaza `tr` in manipuliranje z notranjim ločilom polj (IFS). Na koncu boste lahko učinkovito upravljali z delitvijo nizov in ponastavili IFS na privzeto vrednost. Poglobimo se in poenostavimo vaša opravila skriptiranja Bash!

Ukaz Opis
tr Prevede ali izbriše znake. Tukaj se uporablja za zamenjavo podpičja z znakom za novo vrstico za razdelitev niza.
IFS Notranji ločilnik polj, ki se uporablja za razdelitev nizov na podlagi določenega ločila v skriptih Bash.
read -r -a Prebere vrstico vnosa in jo razdeli v matriko. Možnost -r preprečuje, da bi bile poševnice nazaj interpretirane kot ubežni znaki.
echo Natisne besedilo v standardni izpis. Uporablja se za prikaz elementov razdeljenega niza.
split Funkcija Perl, ki razdeli niz na seznam nizov na podlagi določenega ločila.
foreach Struktura zanke Perl, ki ponavlja seznam vrednosti.

Razumevanje tehnik cepitve nizov Bash

Prvi skript Bash prikazuje, kako razdeliti niz z uporabo tr ukaz. Tukaj definiramo niz IN="bla@some.com;john@home.com" in uporabo echo v povezavi z tr za prevajanje ločila podpičja v znak za novo vrstico. To učinkovito razdeli niz na posamezne vrstice. The for zanka nato ponovi vsako vrstico in natisne naslove v oglatih oklepajih. Ta metoda je enostavna in izkorišča zmogljive zmožnosti obdelave besedila ukazov Unix za manipulacijo nizov.

Druga metoda vključuje prilagajanje Internal Field Separator (IFS). Z začasno nastavitvijo IFS na podpičje, lahko razdelimo niz v matriko. Original shranimo IFS do OIFS preden ga spremenite, s čimer zagotovite, da ga lahko pozneje obnovimo. The read -r -a ukaz prebere vhodni niz v imenovano matriko mails2, ki ga razdeli na podlagi spremenjenega IFS. Po obdelavi original IFS je obnovljena. Ta pristop zagotavlja bolj programski način za obravnavanje cepitve nizov v Bashu, kar nam omogoča uporabo nizov za nadaljnjo manipulacijo.

Uporaba basha za razdelitev nizov na ločilo

Bash skript

#!/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]

Razdelitev niza v Bashu z uporabo IFS

Bash skript

#!/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]

Uporaba Pythona za razdelitev nizov

Python skript

#!/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]

Uporaba Perla za razdelitev niza

Perl skript

#!/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]

Napredne tehnike razdelitve nizov v Bashu

Druga močna metoda za razdelitev nizov v Bashu vključuje uporabo awk ukaz. awk je vsestranski pripomoček v ukazni vrstici, zasnovan za skeniranje in obdelavo vzorcev. Lahko je še posebej uporaben za razdelitev nizov, ker nam omogoča definiranje ločil polj po meri. Na primer, lahko uporabimo awk -F";" '{print $1, $2}' da razdelite niz na podlagi ločila podpičja in natisnete posamezne komponente. Ta metoda je zelo prilagodljiva in lahko obravnava bolj zapletene naloge manipulacije nizov, zaradi česar je dragoceno orodje v kompletu orodij programerja Bash.

Poleg tega je cut ukaz lahko uporabite za razdelitev nizov na podlagi ločil. The cut ukaz se običajno uporablja za pridobivanje odsekov iz vsake vrstice vhodnih podatkov. Z določitvijo ločila z -d in izbiro polj z -f možnost, lahko učinkovito razdelimo in izločimo dele niza. Na primer z uporabo echo $IN | cut -d';' -f1 bi izvlekel prvi e-poštni naslov iz vnosnega niza. Te napredne metode zagotavljajo več nadzora in natančnosti za naloge manipulacije nizov v Bashu.

Pogosta vprašanja in odgovori o razdelitvi nizov v Bashu

  1. Kako v Bashu razdelim niz na ločilo?
  2. Lahko uporabite IFS spremenljivka ali podobni ukazi tr, awk, in cut za razdelitev nizov na ločilo.
  3. Kaj je IFS spremenljivka v Bashu?
  4. The IFS (Internal Field Separator) je posebna spremenljivka, ki definira znak(e), ki se uporablja za razdelitev vhodnega besedila na besede ali žetone.
  5. Kako lahko ponastavim IFS spremenljivko na privzeto vrednost?
  6. Shranite izvirnik IFS vrednost, preden jo spremenite, in obnovite po obdelavi: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
  7. Kaj pomeni tr ukaz do v razdelitvi nizov?
  8. The tr ukaz prevede ali izbriše znake. Lahko zamenja ločila z novimi vrsticami, da razdeli niz: echo $IN | tr ";" "\n".
  9. Ali lahko z Bash razdelim niz v matriko?
  10. Da, s spremembo IFS spremenljivka in uporaba read -r -a, lahko razdelite niz v matriko: read -r -a array <<< "$string".
  11. Kaj je awk ukaz uporabljen za?
  12. awk je pripomoček ukazne vrstice za skeniranje in obdelavo vzorcev. Lahko razdeli nize z definiranjem ločil polj po meri.
  13. Kako deluje cut komandno delo?
  14. The cut ukaz izvleče razdelke iz vsake vrstice vnosa. Lahko razdeli nize tako, da določi ločilo in izbere polja: echo $string | cut -d';' -f1.
  15. Zakaj se uporablja IFS pomaga pri cepljenju nizov?
  16. Uporaba IFS vam omogoča, da določite ločila po meri za razdelitev nizov, zaradi česar je vsestranski za različne oblike vnosa.
  17. Ali je mogoče v Bashu razdeliti niz z več ločili?
  18. Da, lahko uporabite kombinacijo tr in awk za obdelavo več ločil.
  19. Ali lahko uporabim sed za cepitev nizov v Bashu?
  20. Medtem sed je predvsem urejevalnik toka, ga je mogoče kombinirati z drugimi ukazi, kot je awk za posredno razdelitev nizov.

Končne misli o razdelitvi nizov v Bashu

Obvladovanje manipulacije nizov v Bashu lahko bistveno izboljša vašo učinkovitost skriptiranja. Ne glede na to, ali uporabljate IFS za preprosta ločila ali naprednejša orodja, kot je tr in awk, so te tehnike bistvene za učinkovito programiranje Bash. Ne pozabite vedno obnoviti izvirnika IFS da se izognete nepričakovanemu vedenju vaših skriptov. S temi metodami lahko obravnavate široko paleto nalog obdelave nizov v vaših skriptih Bash.