Razdvajanje niza na razdjelnik u Bashu

Razdvajanje niza na razdjelnik u Bashu
Razdvajanje niza na razdjelnik u Bashu

Razbijanje manipulacije nizovima u Bashu

Kada radite sa skriptama ljuske, uobičajeni zadatak je podijeliti niz na temelju graničnika. Na primjer, razmotrite niz koji sadrži adrese e-pošte odvojene točkom i zarezom. Ako trebate obraditi svaku e-poštu pojedinačno, važno je razumjeti kako podijeliti ovaj niz. Ovaj će vas članak voditi kroz različite metode kako to postići u Bashu.

Istražit ćemo rješenja kao što je korištenje naredbe `tr` i manipuliranje unutarnjim razdjelnikom polja (IFS). Na kraju ćete moći učinkovito upravljati dijeljenjem nizova i vratiti IFS na zadanu vrijednost. Uronimo u to i pojednostavimo vaše Bash skriptne zadatke!

Naredba Opis
tr Prevodi ili briše znakove. Ovdje se koristi za zamjenu točke i zareza znakom novog retka za razdvajanje niza.
IFS Unutarnji razdjelnik polja, koristi se za razdvajanje nizova na temelju određenog graničnika u Bash skriptama.
read -r -a Čita redak unosa i dijeli ga u polje. Opcija -r sprječava da se obrnute kose crte tumače kao izlazni znakovi.
echo Ispisuje tekst na standardni izlaz. Koristi se za prikaz podijeljenih elemenata niza.
split Perl funkcija koja dijeli niz na popis nizova na temelju određenog graničnika.
foreach Perl struktura petlje koja ponavlja popis vrijednosti.

Razumijevanje Bash tehnika dijeljenja nizova

Prva Bash skripta pokazuje kako podijeliti niz pomoću tr naredba. Ovdje definiramo niz IN="bla@some.com;john@home.com" i koristiti echo u spoju sa tr za prevođenje razdjelnika točke i zareza u znak novog retka. Ovo učinkovito rastavlja niz u pojedinačne retke. The for petlja zatim ponavlja svaki redak ispisujući adrese unutar uglatih zagrada. Ova metoda je jednostavna i iskorištava moćne mogućnosti obrade teksta Unix naredbi za manipuliranje nizovima.

Druga metoda uključuje podešavanje Internal Field Separator (IFS). Privremenim postavljanjem IFS na točku i zarez, možemo podijeliti niz u niz. Čuvamo original IFS do OIFS prije nego što ga izmijenite, osiguravajući da ga kasnije možemo vratiti. The read -r -a naredba čita ulazni niz u polje tzv mails2, dijeleći ga na temelju modificiranog IFS. Nakon obrade, original IFS se obnavlja. Ovaj pristup pruža programskiji način za rukovanje dijeljenjem nizova u Bashu, dopuštajući nam da koristimo nizove za daljnju manipulaciju.

Korištenje Basha za razdvajanje nizova na razdjelniku

Bash skripta

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

Dijeljenje niza u Bashu pomoću IFS-a

Bash skripta

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

Korištenje Pythona za dijeljenje nizova

Python skripta

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

Korištenje Perla za razdvajanje niza

Perl skripta

#!/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 dijeljenja nizova u Bashu

Još jedna moćna metoda za dijeljenje nizova u Bashu uključuje korištenje awk naredba. awk je svestrani uslužni program naredbenog retka dizajniran za skeniranje i obradu uzoraka. Može biti osobito korisno za dijeljenje nizova jer nam omogućuje definiranje prilagođenih separatora polja. Na primjer, možemo koristiti awk -F";" '{print $1, $2}' da biste podijelili niz na temelju razdjelnika točke-zareza i ispisali pojedinačne komponente. Ova je metoda vrlo fleksibilna i može se nositi sa složenijim zadacima manipulacije nizovima, što je čini vrijednim alatom u Bash programerskom alatu.

Osim toga, cut naredba se može koristiti za dijeljenje nizova na temelju graničnika. The cut naredba se obično koristi za izdvajanje odjeljaka iz svakog retka ulaznih podataka. Određivanjem graničnika s -d opciju i odabirom polja s -f opciju, možemo učinkovito podijeliti i izdvojiti dijelove niza. Na primjer, koristeći echo $IN | cut -d';' -f1 izdvojio bi prvu adresu e-pošte iz niza unosa. Ove napredne metode pružaju više kontrole i preciznosti za zadatke manipulacije nizovima u Bashu.

Uobičajena pitanja i odgovori o dijeljenju nizova u Bashu

  1. Kako mogu podijeliti niz na graničnik u Bashu?
  2. Možete koristiti IFS varijablu ili naredbe poput tr, awk, i cut za razdvajanje nizova na razdjelniku.
  3. Što je IFS varijabla u Bashu?
  4. The IFS (Unutarnji razdjelnik polja) posebna je varijabla koja definira znakove koji se koriste za dijeljenje ulaznog teksta u riječi ili tokene.
  5. Kako mogu resetirati IFS varijablu na zadanu vrijednost?
  6. Sačuvajte original IFS vrijednost prije nego što je promijenite i vratite je nakon obrade: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
  7. Što to tr naredba do u razdvajanju nizova?
  8. The tr naredba prevodi ili briše znakove. Može zamijeniti razdjelnike s novim redcima kako bi podijelio niz: echo $IN | tr ";" "\n".
  9. Mogu li podijeliti niz u niz koristeći Bash?
  10. Da, promjenom IFS varijabilni i koristeći read -r -a, možete podijeliti niz u niz: read -r -a array <<< "$string".
  11. Što je awk naredba korištena za?
  12. awk je uslužni program naredbenog retka za skeniranje i obradu uzoraka. Može podijeliti nizove definiranjem prilagođenih separatora polja.
  13. Kako se cut komandni rad?
  14. The cut naredba izdvaja dijelove iz svakog retka unosa. Može podijeliti nizove određivanjem graničnika i odabirom polja: echo $string | cut -d';' -f1.
  15. Zašto se koristi IFS pomaže u razdvajanju nizova?
  16. Korištenje IFS omogućuje vam definiranje prilagođenih graničnika za dijeljenje nizova, što ga čini svestranim za različite ulazne formate.
  17. Je li moguće podijeliti niz pomoću više graničnika u Bashu?
  18. Da, možete koristiti kombinaciju tr i awk za rukovanje višestrukim graničnicima.
  19. Mogu li koristiti sed za razdvajanje nizova u Bashu?
  20. Dok sed je prvenstveno uređivač toka, može se kombinirati s drugim naredbama kao što su awk za neizravno dijeljenje nizova.

Završne misli o razdvajanju nizova u Bashu

Savladavanje manipulacije nizovima u Bashu može značajno poboljšati vašu učinkovitost skriptiranja. Bilo da koristite IFS za jednostavne graničnike ili naprednije alate poput tr i awk, te su tehnike bitne za učinkovito Bash programiranje. Ne zaboravite uvijek vratiti izvornik IFS kako biste izbjegli neočekivano ponašanje u vašim skriptama. Pomoću ovih metoda možete rješavati širok raspon zadataka obrade nizova u svojim Bash skriptama.