In questo articolo discuteremo come dividere le stringhe in uno script bash.
La divisione di una singola stringa in più stringhe è detta suddivisione delle stringhe. Molti linguaggi di programmazione hanno una funzione incorporata per eseguire la suddivisione delle stringhe, ma in bash non esiste una funzione incorporata per farlo. Esistono vari metodi per eseguire la divisione della stringa in bash. Vediamo tutti i metodi uno per uno con degli esempi.
10 di 10
Metodo 1: utilizzo della variabile IFS
$IFS(Separatore di campo interno) è una variabile di shell speciale. Serve per assegnare il delimitatore (una sequenza di uno o più caratteri in base alla quale vogliamo dividere la stringa). Qualsiasi valore o carattere come ' ', ' ', '-' ecc. può essere il delimitatore. Dopo aver assegnato il valore alla variabile $IFS, è necessario leggere il valore della stringa. Possiamo leggere la stringa usando le opzioni '-r' e '-a'.
- '-r': legge la barra rovesciata () come carattere anziché come carattere di escape
- '-a': viene utilizzato per memorizzare le parole divise in una variabile di array dichiarata dopo l'opzione -a.
Esempio 1: dividere la stringa per spazio
Codice:
#!/bin/bash # String text='Welcome to techcodeview.com' # Set space as the delimiter IFS=' ' # Read the split words into an array # based on space delimiter read -ra newarr <<< '$text' # Print each value of the array by using # the loop for val in '${newarr[@]}'; do echo '$val' done> Produzione:
Welcome to techcodeview.com>
Esempio 2: dividere la stringa con un simbolo
Divisione della stringa utilizzando il simbolo @.
Codice:
#!/bin/bash #String text='Welcome@[email protected]@!!' # Set @ as the delimiter IFS='@' # Read the split words into an array # based on space delimiter read -ra newarr <<< '$text' # Print each value of the array by # using the loop for val in '${newarr[@]}'; do echo '$val' done>
Produzione:
Welcome to techcodeview.com !!>
Metodo 2: senza utilizzare la variabile IFS
In questo metodo, il comando readarray con l'opzione -d viene utilizzato per dividere i dati della stringa. '-d': questa opzione funge da variabile IFS per definire il delimitatore.
Esempio 1: dividere la stringa per spazio
Codice:
#!/bin/bash # Read the main string text='Welcome to techcodeview.com' # Split the string by space readarray -d ' ' -t strarr <<< '$text' # Print each value of the array by # using loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done> Ora vediamo come si comporta lo script:
- Lo script imposta il valore di
text>per dare il benvenuto a techcodeview.com. - IL
readarray>Il comando divide la stringa in un array utilizzando lo spazio come delimitatore, risultando nell'arraystrarr>contenente i seguenti elementi: Benvenuto su techcodeview.com. - Il ciclo for esegue un'iterazione su ogni elemento del file
strarr>vettore. - Stampa ogni elemento uno per uno su righe separate.
Produzione:
Welcome to techcodeview.com>
Esempio 2: Dividi utilizzando UN due punti come UN delimitatore
Codice:
#!/bin/bash # Read the main string text='Welcome:to:techcodeview.com' # Split the string based on the delimiter, ':' readarray -d : -t strarr <<< '$text' # Print each value of the array by using # loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done> Produzione:
Welcome to techcodeview.com>
Metodo 3: dividere la stringa con un delimitatore di più caratteri
In questo metodo, una variabile viene utilizzata per memorizzare dati stringa e un'altra variabile viene utilizzata per memorizzare dati delimitatori a più caratteri. Viene inoltre dichiarata una variabile di array per memorizzare la stringa divisa.
qual è la dimensione dello schermo del mio computer?
Codice:
# Define the string to split text='HelloRomy HelloPushkar HelloNikhil HelloRinkle' # store multi-character delimiter delimiter='Hello' # Concatenate the delimiter with the # main string string=$text$delimiter # Split the text based on the delimiter newarray=() while [[ $string ]]; do newarray+=( '${string%%'$delimiter'*}' ) string=${string#*'$delimiter'} done # Print the words after the split for value in ${newarray[@]} do echo '$value ' done> Produzione:
Romy Pushkar Nikhil Rinkle>