GNU/Linux >> Linux Esercitazione >  >> Linux

Come dividere una stringa nello script Bash

Supponiamo che tu abbia una lunga stringa con diverse parole separate da una virgola o da un trattino basso. Vuoi dividere questa stringa ed estrarre le singole parole.

Puoi dividere le stringhe in bash usando il separatore di campo interno (IFS) e leggere il comando oppure puoi usare il comando tr. Lascia che ti mostri come farlo con degli esempi.

Metodo 1:dividere la stringa usando il comando read in Bash

Ecco il mio script di esempio per dividere la stringa usando il comando di lettura:

#!/bin/bash
#
# Script to split a string based on the delimiter

my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"
IFS=';' read -ra my_array <<< "$my_string"

#Print the split string
for i in "${my_array[@]}"
do
    echo $i
done

La parte che divide la stringa è qui:

IFS=';' read -ra my_array <<< "$my_string"

Lascia che te lo spieghi. IFS determina il delimitatore su cui si desidera dividere la stringa. Nel mio caso, è un punto e virgola. Potrebbe essere qualsiasi cosa tu voglia come spazio, tabulazione, virgola o anche una lettera.

L'IFS nel comando di lettura divide l'input al delimitatore. Il comando read legge l'input grezzo (opzione -r), quindi interpreta letteralmente le barre rovesciate invece di trattarle come caratteri di escape. L'opzione -a con il comando read memorizza la parola letta in un array in bash.

In parole più semplici, la stringa lunga viene suddivisa in più parole separate dal delimitatore e queste parole vengono memorizzate in un array.

Ora puoi accedere all'array per ottenere qualsiasi parola desideri o utilizzare il ciclo for in bash per stampare tutte le parole una per una come ho fatto nello script sopra.

Ecco l'output dello script precedente:

Ubuntu
Linux Mint
Debian
Arch
Fedora

Metodo 2:dividere la stringa usando il comando tr in Bash

Questo è l'esempio della stringa divisa bash usando il comando tr (translate):

#!/bin/bash
#
# Script to split a string based on the delimiter

my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"  
my_array=($(echo $my_string | tr ";" "\n"))

#Print the split string
for i in "${my_array[@]}"
do
    echo $i
done

Questo esempio è praticamente lo stesso del precedente. Invece del comando read, viene utilizzato il comando tr per dividere la stringa sul delimitatore.

Il problema con questo approccio è che gli elementi dell'array sono divisi su "delimitatore di spazio". Per questo motivo, elementi come "Linux Mint" verranno trattati come due parole.

Ecco l'output dello script precedente:

Ubuntu
Linux
Mint
Debian
Arch
Fedora

Questo è il motivo per cui preferisco il primo metodo per dividere la stringa in bash.

Spero che questo rapido tutorial di bash ti abbia aiutato a dividere la stringa. In un post correlato, potresti anche voler leggere il confronto delle stringhe in bash.

E se non conosci Bash, leggi la nostra serie di tutorial per principianti di Bash.


Linux
  1. Come impostare i parametri quando Pipe Bash Script su Bash?

  2. Come chiamare una funzione Bash nello script Bash all'interno di Awk?

  3. Come leggere la stringa come numero esadecimale in Bash?

  4. Script Bash - Come leggere l'input dell'utente

  5. Come funziona cat << EOF in bash?

Come eseguire uno script Bash {7 metodi}

Come scrivere uno script Bash con esempi

Come verificare se una stringa contiene una sottostringa in Bash

Come eseguire uno script Bash

Come posso controllare la sintassi di uno script Bash senza eseguirlo?

Come eseguire uno script bash?