Een string splitsen op een scheidingsteken in Bash

Bash

Stringmanipulatie in Bash afbreken

Bij het werken met shellscripts is het een veel voorkomende taak om een ​​tekenreeks te splitsen op basis van een scheidingsteken. Beschouw bijvoorbeeld een string met e-mailadressen, gescheiden door puntkomma's. Als u elke e-mail afzonderlijk moet verwerken, is het essentieel dat u begrijpt hoe u deze reeks moet splitsen. Dit artikel begeleidt u bij de verschillende methoden om dit in Bash te bereiken.

We zullen oplossingen onderzoeken zoals het gebruik van het `tr`-commando en het manipuleren van de Internal Field Separator (IFS). Tegen het einde zul je in staat zijn om het splitsen van strings efficiënt af te handelen en de IFS terug te zetten naar de standaardwaarde. Laten we erin duiken en uw Bash-scripttaken vereenvoudigen!

Commando Beschrijving
tr Vertaalt of verwijdert tekens. Hier gebruikt om de puntkomma te vervangen door een nieuwregelteken om de tekenreeks te splitsen.
IFS Intern veldscheidingsteken, gebruikt om tekenreeksen te splitsen op basis van een specifiek scheidingsteken in Bash-scripts.
read -r -a Leest een invoerregel en splitst deze in een array. De optie -r voorkomt dat backslashes worden geïnterpreteerd als escape-tekens.
echo Drukt tekst af naar de standaarduitvoer. Wordt gebruikt om de gesplitste stringelementen weer te geven.
split Een Perl-functie die een tekenreeks verdeelt in een lijst met tekenreeksen op basis van een opgegeven scheidingsteken.
foreach Een Perl-lusstructuur die een lijst met waarden herhaalt.

Bash String Splitting-technieken begrijpen

Het eerste Bash-script laat zien hoe je een string kunt splitsen met behulp van de commando. Hier definiëren we een string en gebruiken in combinatie met tr om het puntkomma-scheidingsteken te vertalen naar een nieuweregelteken. Hierdoor wordt de string effectief in afzonderlijke regels opgedeeld. De lus herhaalt vervolgens elke regel en drukt de adressen tussen vierkante haakjes af. Deze methode is eenvoudig en maakt gebruik van de krachtige tekstverwerkingsmogelijkheden van Unix-opdrachten om tekenreeksen te manipuleren.

Een andere methode is het aanpassen van de . Door tijdelijk in te stellen naar een puntkomma kunnen we de string in een array splitsen. Wij bewaren het origineel naar OIFS voordat we het wijzigen, zodat we het later kunnen herstellen. De commando leest de invoerreeks in een array genaamd , waarbij het wordt gesplitst op basis van het gewijzigde . Na verwerking het origineel IFS wordt hersteld. Deze aanpak biedt een meer programmatische manier om het splitsen van tekenreeksen in Bash af te handelen, waardoor we arrays kunnen gebruiken voor verdere manipulatie.

Bash gebruiken om tekenreeksen op een scheidingsteken te splitsen

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]

Een string splitsen in Bash met 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]

Python gebruiken voor het splitsen van strings

Python-script

#!/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 gebruiken om een ​​string te splitsen

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]

Geavanceerde technieken voor het splitsen van snaren in Bash

Een andere krachtige methode voor het splitsen van strings in Bash is het gebruik van de commando. is een veelzijdig opdrachtregelhulpprogramma dat is ontworpen voor het scannen en verwerken van patronen. Het kan met name handig zijn voor het splitsen van tekenreeksen, omdat we hierdoor aangepaste veldscheidingstekens kunnen definiëren. Wij kunnen bijvoorbeeld gebruiken om een ​​tekenreeks te splitsen op basis van het puntkommascheidingsteken en de afzonderlijke componenten af ​​te drukken. Deze methode is zeer flexibel en kan complexere stringmanipulatietaken aan, waardoor het een waardevol hulpmiddel is in de toolkit van een Bash-programmeur.

Bovendien is de commando kan worden gebruikt om tekenreeksen te splitsen op basis van scheidingstekens. De De opdracht wordt doorgaans gebruikt voor het extraheren van secties uit elke regel met invoergegevens. Door een scheidingsteken op te geven met de optie en selecteer de velden met de -f optie kunnen we delen van een string efficiënt splitsen en extraheren. Gebruik bijvoorbeeld zou het eerste e-mailadres uit de invoerreeks extraheren. Deze geavanceerde methoden bieden meer controle en precisie voor tekenreeksmanipulatietaken in Bash.

  1. Hoe splits ik een string op een scheidingsteken in Bash?
  2. U kunt gebruik maken van de variabele of opdrachten zoals , , En cut om tekenreeksen op een scheidingsteken te splitsen.
  3. Wat is de variabele in Bash?
  4. De (Internal Field Separator) is een speciale variabele die de tekens definieert die worden gebruikt om invoertekst in woorden of tokens te splitsen.
  5. Hoe kan ik de variabele naar de standaardwaarde?
  6. Bewaar het origineel waarde voordat u deze wijzigt, en herstel deze na verwerking: .
  7. Wat doet de commando doen bij het splitsen van strings?
  8. De commando vertaalt of verwijdert tekens. Het kan scheidingstekens vervangen door nieuwe regels om een ​​string te splitsen: .
  9. Kan ik een string in een array splitsen met Bash?
  10. Ja, door het wijzigen van de variabel en gebruikend , kun je een string in een array splitsen:
  11. Wat is de commando gebruikt?
  12. is een opdrachtregelhulpprogramma voor het scannen en verwerken van patronen. Het kan tekenreeksen splitsen door aangepaste veldscheidingstekens te definiëren.
  13. Hoe doet de opdracht werken?
  14. De commando extraheert secties uit elke invoerregel. Het kan tekenreeksen splitsen door een scheidingsteken op te geven en velden te selecteren: .
  15. Waarom gebruikt nuttig bij het splitsen van snaren?
  16. Gebruik makend van Hiermee kunt u aangepaste scheidingstekens definiëren voor het splitsen van tekenreeksen, waardoor het veelzijdig is voor verschillende invoerformaten.
  17. Is het mogelijk om een ​​string te splitsen door meerdere scheidingstekens in Bash?
  18. Ja, je kunt een combinatie van gebruiken En meerdere scheidingstekens verwerken.
  19. Kan ik gebruiken voor het splitsen van snaren in Bash?
  20. Terwijl is in de eerste plaats een streameditor en kan worden gecombineerd met andere opdrachten zoals om snaren indirect te splitsen.

Het beheersen van tekenreeksmanipulatie in Bash kan uw scriptefficiëntie aanzienlijk verbeteren. Of het nu gaat om gebruik voor eenvoudige scheidingstekens of meer geavanceerde tools zoals En , zijn deze technieken essentieel voor effectief Bash-programmeren. Vergeet niet om altijd het origineel te herstellen IFS om onverwacht gedrag in uw scripts te voorkomen. Met deze methoden kunt u een breed scala aan tekenreeksverwerkingstaken in uw Bash-scripts afhandelen.