GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Scripting – Manipolazione di stringhe

La manipolazione delle stringhe è uno dei concetti fondamentali nello scripting bash. Nella programmazione, le stringhe sono uno dei tipi di dati che sono una sequenza ordinata di caratteri. È importante sapere come creare e manipolare le stringhe in bash. In questa guida impareremo la manipolazione delle stringhe nello scripting della shell Bash con semplici esempi. Ti sentirai a tuo agio a lavorare con le stringhe bash alla fine di questo articolo.

Assegnazione variabile

Le stringhe possono essere assegnate a una variabile e successivamente utilizzate nello script per ulteriori elaborazioni. Ad esempio, sto creando una variabile denominata "GREET_USER" e stampando la stringa sul terminale.

$ GREET_USER="Hello, Thanks for visiting OSTechnix"
$ echo "$GREET_USER"

Bash non ha un sistema di tipi forti, quindi se assegni un valore a una variabile verrà trattata come un tipo stringa. Puoi creare stringhe con virgolette singole, doppie o senza.

C'è una differenza tra virgolette singole e virgolette doppie in bash. Le virgolette singole impediscono l'espansione di variabili e comandi mentre le virgolette doppie lo supportano. Dai un'occhiata all'esempio qui sotto.

Ho creato un'altra variabile denominata "SITE_NAME" ed è utilizzato nel "GREET_USER" variabile. Tra virgolette doppie, la variabile verrà espansa e tra virgolette singole, la variabile non verrà espansa.

$ SITE_NAME="OSTechnix"
## DOUBLE QUOTES

$ GREET_USER="Hello, Thanks for visiting ${SITE_NAME}"
$ echo "$GREET_USER"
# SINGLE QUOTES

$ GREET_USER='Hello, Thanks for visiting ${SITE_NAME}'
$ echo "$GREET_USER"

Lunghezza della stringa

Per trovare la lunghezza della stringa puoi usare il # simbolo. Trovare la lunghezza della stringa sarà utile in alcuni casi in cui devi scrivere della logica in base al numero di stringhe.

$ echo "${#SITE_NAME}"

Conversione di stringhe in Array

Esistono molti modi per convertire il tipo di dati stringa in tipo array. Il modo più semplice sarebbe racchiudere la stringa tra parentesi graffe.

$ ARR_TYPE=($GREET_USER)
$ echo ${ARR_TYPE[@]}
$ for element in ${ARR_TYPE[@]}; do
  echo $element
done

Il secondo metodo sarebbe dividere la stringa e memorizzarla come una matrice in base al delimitatore utilizzato nella stringa. Nell'esempio precedente, lo spazio viene utilizzato come separatore di campo (IFS), che è l'IFS predefinito in bash. Ad esempio, se si dispone di una stringa separata da virgole, è possibile impostare l'IFS su una virgola e creare un array. Per maggiori dettagli su IFS, fare riferimento alla seguente guida:

  • Scripting Bash:spiegazione del ciclo While e Until con esempi
$ STR_TO_ARR="column1,column2,column3"
$ IFS=","
$ ARR=(${STR_TO_ARR})
$ for element in ${ARR[@]}; do echo $element; done
$ echo "${ARR[@]}"

Conversione caso

Bash ha il supporto integrato per la conversione di stringhe maiuscole. Devi utilizzare alcuni caratteri speciali alla fine della stringa per la conversione delle maiuscole, come mostrato di seguito.

# SPECIAL CHARACTERS

,, ==> Converts an entire string to lowercase
^^ ==> Converts an entire string to Uppercase
~~ ==> Transpose Case
,  ==> Converts first letter alone to lowercase
^  ==> Converts first letter alone to uppercase
# ---- LOWER TO UPPER CASE ----
$ L_TO_U="welcome to ostechnix"
$ echo ${L_TO_U^^}


# ---- UPPER TO LOWER CASE ----
$ U_TO_L="WELCOME TO OSTECHNIX"
$ echo ${L_TO_U,,}


# ---- TRANSPOSE CASE ----
$ TRS_CASE="Welcome To OsTechnix"
$ echo ${TRS_CASE~~}


# ---- FIRST LETTER TO LOWERCASE ----
$ F_TO_L="OSTECHNIX"
$ echo ${F_TO_L,}


# ---- FIRST LETTER TO UPPERCASE ----
$ F_TO_U="ostechnix"
$ echo ${F_TO_U^}

Puoi anche utilizzare la corrispondenza del modello regex e convertire il caso per le corrispondenze.

$ L_TO_U="welcome to ostechnix"
$ echo ${L_TO_U^^[toe]}

Concatenazione di stringhe

Puoi concatenare più stringhe posizionando le stringhe una dopo l'altra. A seconda di come sono concatenate le tue stringhe, puoi anche aggiungere caratteri extra.

$ SITE_NAME="OSTechnix"
$ MESSAGE="Welcome to"
$ echo "${MESSAGE} {SITE_NAME}"

Tagliare le corde

Lo string slicing è un modo per estrarre una parte di una stringa utilizzando la posizione dell'indice. A ogni carattere nella stringa viene assegnato un valore Integer con il quale può essere utilizzato per afferrare una parte della stringa. Il valore dell'indice varia da 0 a N. Di seguito è riportata la sintassi per lo slicing.

{STRING:START:LENGTH}

START => Starting Index Position
LENGTH => Length of the String from position START

Se LENGTH non è specificato, la stringa verrà stampata fino alla fine dalla posizione dell'indice START .

$ SITE_NAME="OSTechnix"
$ echo ${SITE_NAME:2}

Con LENGTH data, stamperà la sottostringa dalla posizione dell'indice START e quanti caratteri devono essere stampati.

$ echo ${SITE_NAME:2:2}

Puoi anche invertire la stringa in molti modi. Il modo più semplice è usare il comando rev. Se desideri farlo in modo semplice senza utilizzare alcun comando esterno, devi scrivere la logica manualmente.

$ echo ${SITE_NAME} | rev

Cerca e sostituisci

Esiste un modo nativo per cercare e sostituire i caratteri in una stringa senza utilizzare alcun comando esterno come sed o awk .

Per sostituire la prima occorrenza di sottostringa, utilizza la seguente sintassi.

{STRING/X/Y}
The first occurrence of X will be replaced by Y.

Dai un'occhiata all'esempio seguente in cui la prima occorrenza della parola "linux" viene sostituito con LINUX in maiuscolo.

$ MESSAGE="linux is awesome to work with.
Ubuntu is one of the powerful linux distribution"
$ echo $MESSAGE
$ echo ${MESSAGE/linux/LINUX}

Per sostituire tutte le occorrenze della parola, usa la seguente sintassi.

$ echo ${MESSAGE//linux/LINUX}

Rimuovi sottostringa

Esistono diversi modi per rimuovere la sottostringa dalla stringa. Utilità esterne come sed , awk o tr può essere utilizzato o c'è un modo per farlo in modo nativo bash.

Nel modo nativo di bash, l'espansione dei parametri viene utilizzata per rimuovere la sottostringa. Devi usare il % simbolo seguito da un motivo da rimuovere. Questo corrisponderà all'ultimo modello trovato e lo rimuoverà.

Ad esempio, desidero rimuovere le parole che seguono il punto (. ) deve essere utilizzata la seguente sintassi. Qui tutto ciò che viene dopo il punto (. ) sarà rimosso. In questo caso, l'ultimo pattern abbinato .com viene rimosso.

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME%.*}

Per abbinare la prima occorrenza del pattern, utilizza la doppia percentuale simbolo

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME%%.*}

Puoi anche utilizzare il # o ## simbolo che eseguirà una sorta di eliminazione inversa. Con un unico # simbolo, il primo motivo viene abbinato e tutto ciò che precede il motivo viene eliminato.

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME#*.}

Con il doppio ## simbolo, l'ultimo motivo viene abbinato e tutto ciò che precede il motivo viene eliminato.

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME##*.}

Conclusione

In questo articolo abbiamo visto come creare stringhe in bash e diversi modi per manipolare le stringhe. Per acquisire familiarità con la manipolazione delle stringhe bash, avvia il terminale e inizia a esercitarti con gli esempi forniti in questa guida. Se hai commenti o domande, utilizza la sezione commenti qui sotto.

Guide agli script di Bash:

  • Scripting Bash – Spiegazione del comando Printf con esempi
  • Scripting Bash:array indicizzato spiegato con esempi
  • Scripting Bash:array associativo spiegato con esempi
  • Scripting di Bash:il ciclo For viene spiegato con esempi
  • Il reindirizzamento di Bash spiegato con esempi
  • Scripting Bash:variabili spiegate con esempi
  • Scripting Bash:funzioni spiegate con esempi
  • Comando Bash Echo spiegato con esempi in Linux
  • Tutorial Bash Heredoc per principianti

Linux
  1. Come confrontare le stringhe negli script di Bash Shell

  2. Come dividere una stringa nello script Bash

  3. Come verificare se la stringa contiene una sottostringa in Bash

  4. Converti una stringa di testo in bash in array

  5. Cosa fa 'bash -c'?

Bash Scripting – Dichiarazioni condizionali

Bash Scripting – Case Statement

Script Bash(II)

Scripting Bash(III)

Interfacce utente con finestra di dialogo. Scripting Bash(IV)

Bash Beginner Series #6:Operazioni con le stringhe in Bash