Dele en streng på en skilletegn i Bash

Dele en streng på en skilletegn i Bash
Dele en streng på en skilletegn i Bash

Bryte ned strengmanipulasjon i Bash

Når du arbeider med shell-skript, er en vanlig oppgave å dele en streng basert på et skilletegn. Tenk for eksempel på en streng som inneholder e-postadresser atskilt med semikolon. Hvis du trenger å behandle hver e-post individuelt, er det viktig å forstå hvordan du deler denne strengen. Denne artikkelen vil guide deg gjennom ulike metoder for å oppnå dette i Bash.

Vi vil utforske løsninger som å bruke `tr`-kommandoen og manipulere Internal Field Separator (IFS). Mot slutten vil du være i stand til å håndtere strengdeling effektivt og tilbakestille IFS til standardverdien. La oss dykke inn og forenkle Bash-skriptoppgavene dine!

Kommando Beskrivelse
tr Oversetter eller sletter tegn. Brukes her for å erstatte semikolon med et linjeskifttegn for å dele strengen.
IFS Internal Field Separator, brukes til å dele strenger basert på et spesifikt skilletegn i Bash-skript.
read -r -a Leser en linje med inndata og deler den opp i en matrise. Alternativet -r forhindrer omvendt skråstrek fra å bli tolket som escape-tegn.
echo Skriver ut tekst til standardutdata. Brukes til å vise de delte strengelementene.
split En Perl-funksjon som deler en streng i en liste med strenger basert på et spesifisert skilletegn.
foreach En Perl-løkkestruktur som itererer over en liste med verdier.

Forstå teknikker for splitting av bash-strenger

Det første Bash-skriptet viser hvordan du deler en streng ved å bruke tr kommando. Her definerer vi en streng IN="bla@some.com;john@home.com" og bruk echo i forbindelse med tr for å oversette semikolonavgrensningen til et linjeskifttegn. Dette bryter strengen effektivt i individuelle linjer. De for løkken itererer deretter over hver linje, og skriver ut adressene innenfor hakeparenteser. Denne metoden er enkel og utnytter de kraftige tekstbehandlingsmulighetene til Unix-kommandoer for å manipulere strenger.

En annen metode innebærer å justere Internal Field Separator (IFS). Ved midlertidig innstilling IFS til et semikolon, kan vi dele strengen i en matrise. Vi lagrer originalen IFS til OIFS før du endrer det, for å sikre at vi kan gjenopprette det senere. De read -r -a kommandoen leser inngangsstrengen inn i en matrise kalt mails2, dele den basert på den modifiserte IFS. Etter bearbeiding, originalen IFS er gjenopprettet. Denne tilnærmingen gir en mer programmatisk måte å håndtere strengdeling i Bash, slik at vi kan bruke arrays for videre manipulering.

Bruke Bash til å dele strenger på en skilletegn

Bash Script

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

Dele en streng i Bash ved hjelp av IFS

Bash Script

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

Bruker Python for String Splitting

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]

Bruke Perl til å dele en streng

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]

Avanserte strengdelingsteknikker i Bash

En annen kraftig metode for å dele strenger i Bash innebærer å bruke 1. 3 kommando. 1. 3 er et allsidig kommandolinjeverktøy designet for mønsterskanning og prosessering. Det kan være spesielt nyttig for å dele strenger fordi det lar oss definere egendefinerte feltseparatorer. For eksempel kan vi bruke awk -F";" '{print $1, $2}' å dele en streng basert på semikolon-skilletegnet og skrive ut de enkelte komponentene. Denne metoden er svært fleksibel og kan håndtere mer komplekse strengmanipulasjonsoppgaver, noe som gjør den til et verdifullt verktøy i en Bash-programmerers verktøysett.

I tillegg har cut kommandoen kan brukes til å dele strenger basert på skilletegn. De cut kommandoen brukes vanligvis for å trekke ut seksjoner fra hver linje med inndata. Ved å spesifisere et skilletegn med -d og velge feltene med -f alternativet, kan vi effektivt dele og trekke ut deler av en streng. For eksempel ved å bruke echo $IN | cut -d';' -f1 vil trekke ut den første e-postadressen fra inndatastrengen. Disse avanserte metodene gir mer kontroll og presisjon for strengmanipulasjonsoppgaver i Bash.

Vanlige spørsmål og svar om strengdeling i Bash

  1. Hvordan deler jeg en streng på et skilletegn i Bash?
  2. Du kan bruke IFS variabel eller kommandoer som tr, 1. 3, og cut å dele strenger på et skilletegn.
  3. Hva er IFS variabel i Bash?
  4. De IFS (Internal Field Separator) er en spesiell variabel som definerer tegnet(e) som brukes til å dele inn tekst i ord eller tokens.
  5. Hvordan kan jeg tilbakestille IFS variabel til standardverdien?
  6. Lagre originalen IFS verdi før du endrer den, og gjenopprett den etter behandling: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
  7. Hva gjør tr kommando gjøre i strengdeling?
  8. De tr kommandoen oversetter eller sletter tegn. Den kan erstatte skilletegn med nye linjer for å dele en streng: echo $IN | tr ";" "\n".
  9. Kan jeg dele en streng i en matrise ved å bruke Bash?
  10. Ja, ved å endre IFS variabel og bruker read -r -a, kan du dele en streng i en matrise: read -r -a array <<< "$string".
  11. Hva er 1. 3 kommando brukt til?
  12. 1. 3 er et kommandolinjeverktøy for mønsterskanning og prosessering. Den kan dele strenger ved å definere egendefinerte feltseparatorer.
  13. Hvordan fungerer cut kommandoarbeid?
  14. De cut kommando trekker ut deler fra hver linje med inndata. Den kan dele strenger ved å spesifisere et skilletegn og velge felt: echo $string | cut -d';' -f1.
  15. Hvorfor bruker IFS nyttig ved strengdeling?
  16. Ved hjelp av IFS lar deg definere egendefinerte skilletegn for å dele strenger, noe som gjør den allsidig for forskjellige inndataformater.
  17. Er det mulig å dele en streng med flere skilletegn i Bash?
  18. Ja, du kan bruke en kombinasjon av tr og 1. 3 å håndtere flere skilletegn.
  19. Kan jeg bruke sed for strengdeling i Bash?
  20. Samtidig som sed er primært en stream editor, den kan kombineres med andre kommandoer som 1. 3 å dele strenger indirekte.

Siste tanker om strengdeling i Bash

Å mestre strengmanipulering i Bash kan forbedre skripteffektiviteten din betraktelig. Enten du bruker IFS for enkle skilletegn eller mer avanserte verktøy som tr og 1. 3, disse teknikkene er avgjørende for effektiv Bash-programmering. Husk å alltid gjenopprette originalen IFS for å unngå uventet oppførsel i skriptene dine. Med disse metodene kan du håndtere et bredt spekter av strengbehandlingsoppgaver i Bash-skriptene dine.