Împărțirea unui șir pe un delimitator în Bash

Bash

Defalcarea manipulării șirurilor în Bash

Când lucrați cu scripturi shell, o sarcină comună este împărțirea unui șir pe baza unui delimitator. De exemplu, luați în considerare un șir care conține adrese de e-mail separate prin punct și virgulă. Dacă trebuie să procesați fiecare e-mail individual, înțelegerea modului de împărțire a acestui șir devine esențială. Acest articol vă va ghida prin diferite metode pentru a realiza acest lucru în Bash.

Vom explora soluții precum utilizarea comenzii `tr` și manipularea Separatorului de câmp intern (IFS). Până la sfârșit, veți putea gestiona eficient împărțirea șirurilor și veți reseta IFS-ul la valoarea implicită. Să ne aprofundăm și să simplificăm sarcinile de scriptare Bash!

Comanda Descriere
tr Traduce sau șterge caractere. Folosit aici pentru a înlocui punctul și virgulă cu un caracter newline pentru a împărți șirul.
IFS Separator de câmp intern, folosit pentru a împărți șirurile pe baza unui delimitator specific în scripturile Bash.
read -r -a Citește o linie de intrare și o împarte într-o matrice. Opțiunea -r împiedică interpretarea barelor oblice inverse ca caractere de escape.
echo Imprimă text în rezultatul standard. Folosit pentru afișarea elementelor șirului divizat.
split O funcție Perl care împarte un șir într-o listă de șiruri bazată pe un delimitator specificat.
foreach O structură de buclă Perl care iterează peste o listă de valori.

Înțelegerea tehnicilor de împărțire a șirurilor Bash

Primul script Bash demonstrează cum să împărțiți un șir folosind comanda. Aici definim un șir si foloseste în legătură cu tr pentru a traduce delimitatorul punctului și virgulă într-un caracter newline. Acest lucru sparge efectiv șirul în linii individuale. The bucla apoi iterează peste fiecare linie, imprimând adresele între paranteze drepte. Această metodă este simplă și folosește capabilitățile puternice de procesare a textului ale comenzilor Unix pentru a manipula șirurile.

O altă metodă implică ajustarea . Prin setare temporară la un punct și virgulă, putem împărți șirul într-o matrice. Salvăm originalul la OIFS înainte de a-l modifica, asigurându-ne că îl putem restaura mai târziu. The comanda citește șirul de intrare într-o matrice numită , împărțindu-l pe baza modificărilor . După procesare, originalul IFS este restaurat. Această abordare oferă o modalitate mai programatică de a gestiona divizarea șirurilor în Bash, permițându-ne să utilizăm matrice pentru manipulare ulterioară.

Folosind Bash pentru a împărți șiruri pe un delimitator

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]

Împărțirea unui șir în Bash folosind 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]

Folosind Python pentru împărțirea șirurilor

Script Python

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

Folosind Perl pentru a împărți un șir

Script Perl

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

Tehnici avansate de împărțire a șirurilor în Bash

O altă metodă puternică de împărțire a șirurilor în Bash implică utilizarea comanda. este un utilitar de linie de comandă versatil conceput pentru scanarea și procesarea modelelor. Poate fi deosebit de util pentru împărțirea șirurilor, deoarece ne permite să definim separatori de câmp personalizat. De exemplu, putem folosi pentru a împărți un șir pe baza delimitatorului punct și virgulă și a tipări componentele individuale. Această metodă este foarte flexibilă și poate gestiona sarcini mai complexe de manipulare a șirurilor, ceea ce o face un instrument valoros în setul de instrumente al unui programator Bash.

În plus, cel comanda poate fi utilizată pentru a împărți șiruri pe baza delimitatorilor. The comanda este de obicei folosită pentru extragerea secțiunilor din fiecare linie de date de intrare. Prin specificarea unui delimitator cu opțiunea și selectând câmpurile cu -f opțiunea, putem împărți și extrage în mod eficient părți dintr-un șir. De exemplu, folosind ar extrage prima adresă de e-mail din șirul de intrare. Aceste metode avansate oferă mai mult control și precizie pentru sarcinile de manipulare a șirurilor în Bash.

  1. Cum împart un șir pe un delimitator în Bash?
  2. Puteți folosi variabilă sau comenzi precum , , și cut pentru a împărți șiruri pe un delimitator.
  3. Ce este variabilă în Bash?
  4. The (Internal Field Separator) este o variabilă specială care definește caracterul(ele) folosit(e) pentru a împărți textul introdus în cuvinte sau simboluri.
  5. Cum pot reseta variabilă la valoarea sa implicită?
  6. Salvați originalul valoarea înainte de a o modifica și restaurați-o după procesare: .
  7. Ce face comanda do în împărțirea șirurilor?
  8. The comanda traduce sau șterge caractere. Poate înlocui delimitatorii cu linii noi pentru a împărți un șir: .
  9. Pot împărți un șir într-o matrice folosind Bash?
  10. Da, prin schimbarea variabilă și folosind , puteți împărți un șir într-o matrice:
  11. Ce este comanda folosita pentru?
  12. este un utilitar de linie de comandă pentru scanarea și procesarea modelelor. Poate împărți șiruri prin definirea separatoarelor de câmp personalizate.
  13. Cum face munca de comanda?
  14. The comanda extrage secțiuni din fiecare linie de intrare. Poate împărți șiruri de caractere specificând un delimitator și selectând câmpuri: .
  15. De ce se folosește util în împărțirea șirurilor?
  16. Folosind vă permite să definiți delimitatori personalizați pentru împărțirea șirurilor, făcându-l versatil pentru diferite formate de intrare.
  17. Este posibil să împărțiți un șir de mai mulți delimitatori în Bash?
  18. Da, puteți folosi o combinație de și pentru a gestiona mai mulți delimitatori.
  19. Pot folosi pentru împărțirea șirurilor în Bash?
  20. In timp ce este în primul rând un editor de flux, poate fi combinat cu alte comenzi precum a împărți șiruri indirect.

Stăpânirea manipulării șirurilor în Bash vă poate îmbunătăți semnificativ eficiența de scriptare. Fie că se utilizează pentru delimitatori simpli sau instrumente mai avansate precum și , aceste tehnici sunt esențiale pentru programarea Bash eficientă. Nu uitați să restaurați întotdeauna originalul IFS pentru a evita comportamentul neașteptat în scripturile dvs. Cu aceste metode, puteți gestiona o gamă largă de sarcini de procesare a șirurilor în scripturile Bash.