Dela en sträng på en avgränsare i Bash

Bash

Breaking Down String Manipulation i Bash

När man arbetar med skalskript är en vanlig uppgift att dela en sträng baserat på en avgränsare. Tänk till exempel på en sträng som innehåller e-postadresser separerade med semikolon. Om du behöver bearbeta varje e-postmeddelande individuellt, blir det viktigt att förstå hur man delar denna sträng. Den här artikeln guidar dig genom olika metoder för att uppnå detta i Bash.

Vi kommer att utforska lösningar som att använda kommandot `tr` och manipulera den interna fältseparatorn (IFS). I slutet kommer du att kunna hantera strängdelning effektivt och återställa IFS till dess standardvärde. Låt oss dyka in och förenkla dina Bash-skriptuppgifter!

Kommando Beskrivning
tr Översätter eller tar bort tecken. Används här för att ersätta semikolon med ett nyradstecken för att dela strängen.
IFS Intern fältseparator, används för att dela strängar baserat på en specifik avgränsare i Bash-skript.
read -r -a Läser en rad med inmatning och delar upp den i en array. Alternativet -r förhindrar att omvänt snedstreck tolkas som escape-tecken.
echo Skriver ut text till standardutdata. Används för att visa de delade strängelementen.
split En Perl-funktion som delar upp en sträng i en lista med strängar baserat på en angiven avgränsare.
foreach En Perl-loopstruktur som itererar över en lista med värden.

Förstå bash-strängdelningstekniker

Det första Bash-skriptet visar hur man delar en sträng med hjälp av kommando. Här definierar vi en sträng och använda i samband med tr för att översätta semikolonavgränsaren till ett nyradstecken. Detta bryter effektivt strängen i enskilda rader. De loopen itererar sedan över varje rad och skriver ut adresserna inom hakparenteser. Den här metoden är enkel och utnyttjar de kraftfulla textbearbetningsfunktionerna i Unix-kommandon för att manipulera strängar.

En annan metod innebär att justera . Genom att tillfälligt ställa in till semikolon kan vi dela upp strängen i en array. Vi sparar originalet till OIFS innan vi ändrar det, så att vi kan återställa det senare. De kommandot läser inmatningssträngen till en array som kallas , dela upp den baserat på den modifierade . Efter bearbetning, originalet IFS är återställd. Detta tillvägagångssätt ger ett mer programmatiskt sätt att hantera strängdelning i Bash, vilket gör att vi kan använda arrayer för ytterligare manipulation.

Använda Bash för att dela strängar på en avgränsare

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]

Dela en sträng i Bash med 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]

Använder Python för strängdelning

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]

Använda Perl för att dela en sträng

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]

Avancerade tekniker för strängdelning i Bash

En annan kraftfull metod för att dela strängar i Bash involverar att använda kommando. är ett mångsidigt kommandoradsverktyg designat för mönsterskanning och bearbetning. Det kan vara särskilt användbart för att dela strängar eftersom det tillåter oss att definiera anpassade fältseparatorer. Vi kan till exempel använda att dela en sträng baserat på semikolonavgränsaren och skriva ut de enskilda komponenterna. Denna metod är mycket flexibel och kan hantera mer komplexa strängmanipuleringsuppgifter, vilket gör den till ett värdefullt verktyg i en Bash-programmerares verktygslåda.

Dessutom har kommandot kan användas för att dela strängar baserat på avgränsare. De kommandot används vanligtvis för att extrahera sektioner från varje rad med indata. Genom att ange en avgränsare med och välja fälten med -f alternativ kan vi effektivt dela och extrahera delar av en sträng. Till exempel att använda skulle extrahera den första e-postadressen från inmatningssträngen. Dessa avancerade metoder ger mer kontroll och precision för strängmanipuleringsuppgifter i Bash.

  1. Hur delar jag en sträng på en avgränsare i Bash?
  2. Du kan använda variabel eller kommandon som , , och cut att dela strängar på en avgränsare.
  3. Vad är variabel i Bash?
  4. De (Intern fältseparator) är en speciell variabel som definierar tecknet/tecken som används för att dela upp inmatad text i ord eller tokens.
  5. Hur kan jag återställa variabel till dess standardvärde?
  6. Spara originalet värde innan du ändrar det, och återställ det efter bearbetning: .
  7. Vad gör kommando gör i strängdelning?
  8. De kommandot översätter eller tar bort tecken. Det kan ersätta avgränsare med nya rader för att dela en sträng: .
  9. Kan jag dela en sträng i en array med Bash?
  10. Ja, genom att ändra variabel och använder , kan du dela en sträng i en array:
  11. Vad är kommando som används för?
  12. är ett kommandoradsverktyg för mönsterskanning och bearbetning. Det kan dela strängar genom att definiera anpassade fältavgränsare.
  13. Hur gör det kommandoarbete?
  14. De kommando extraherar avsnitt från varje inmatningsrad. Den kan dela strängar genom att ange en avgränsare och välja fält: .
  15. Varför använder till hjälp vid strängdelning?
  16. Använder sig av låter dig definiera anpassade avgränsare för att dela strängar, vilket gör den mångsidig för olika inmatningsformat.
  17. Är det möjligt att dela en sträng med flera avgränsare i Bash?
  18. Ja, du kan använda en kombination av och att hantera flera avgränsare.
  19. Kan jag använda för strängdelning i Bash?
  20. Medan är i första hand en strömredigerare, den kan kombineras med andra kommandon som att dela strängar indirekt.

Att bemästra strängmanipulation i Bash kan avsevärt förbättra din skripteffektivitet. Oavsett om du använder för enkla avgränsare eller mer avancerade verktyg som och , dessa tekniker är viktiga för effektiv Bash-programmering. Kom ihåg att alltid återställa originalet IFS för att undvika oväntat beteende i dina skript. Med dessa metoder kan du hantera ett brett utbud av strängbearbetningsuppgifter i dina Bash-skript.