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.