Come manipolare stringhe in Bash su Linux
Pubblicato: 2022-07-28
Se c'è una cosa con cui Linux è ben equipaggiato, sono le utility per manipolare le stringhe. Ma c'è anche un intero set di funzionalità integrato nella shell Bash. Ecco come si usa.
Manipolazione di stringhe
L'ecosistema Linux è ricco di strumenti fantastici per lavorare con testo e stringhe. Questi includono awk, grep, sed e cut. Per qualsiasi discussione di testo pesante, queste dovrebbero essere le tue scelte preferite.
A volte, però, è conveniente utilizzare le capacità integrate della shell, specialmente quando si scrive uno script breve e semplice. Se il tuo script verrà condiviso con altre persone e verrà eseguito sui loro computer, l'utilizzo della funzionalità Bash standard significa che non devi preoccuparti della presenza o della versione di nessuna delle altre utilità.
Se hai bisogno della potenza delle utility dedicate, usale con tutti i mezzi. Ecco per cosa sono lì. Ma spesso il tuo script e Bash possono portare a termine il lavoro da soli.
Poiché sono incorporati in Bash, puoi usarli negli script o sulla riga di comando. Usarli in una finestra di terminale è un modo rapido e conveniente per prototipare i tuoi comandi e perfezionare la sintassi. Evita il ciclo di modifica, salvataggio, esecuzione e debug.
Creazione e utilizzo di variabili stringa
Tutto ciò di cui abbiamo bisogno per dichiarare una variabile e assegnarle una stringa è nominare la variabile, utilizzare il segno di uguale =
e fornire la stringa. Se ci sono spazi nella tua stringa, avvolgila tra virgolette singole o doppie. Assicurati che non ci siano spazi bianchi su entrambi i lati del segno di uguale.
my_string="Ciao, How-To Geek World."
eco $mia_stringa
Dopo aver creato una variabile, il nome della variabile viene aggiunto all'elenco delle parole di completamento delle schede della shell. In questo esempio, digitando "my_" e premendo il tasto "Tab" è stato inserito il nome completo sulla riga di comando.
Variabili di sola lettura
C'è un comando di declare
che possiamo usare per dichiarare le variabili. In casi semplici, non ne hai davvero bisogno, ma il suo utilizzo ti consente di utilizzare alcune delle opzioni del comando. Probabilmente quella che useresti di più è l'opzione -r
(sola lettura). Questo crea una variabile di sola lettura che non può essere modificata.
dichiara -r read_only_var="Questa è una stringa immutabile!"
Se proviamo ad assegnargli un nuovo valore, fallirà.
read_only_var="Una nuova stringa..."
Scrivere nella finestra del terminale
Possiamo scrivere più stringhe nella finestra del terminale usando echo o printf in modo che appaiano come se fossero una stringa. E non siamo limitati alle nostre variabili stringhe, possiamo incorporare variabili di ambiente nei nostri comandi.
user_account="Il tuo account utente è:"
echo $account_utente $USER
Stringhe concatenate
L'operatore più-uguale, +=
, ti consente di "aggiungere" due stringhe insieme. Si chiama concatenazione.
user_account="Il tuo account utente è:"
account_utente+=$UTENTE
eco $account_utente
Nota che non ottieni uno spazio aggiunto automaticamente tra le stringhe concatenate. Se è necessario disporre di uno spazio, è necessario inserirne uno esplicitamente alla fine della prima stringa o all'inizio della seconda.
user_account="Il tuo account utente è: "
account_utente+=$UTENTE
eco $account_utente
CORRELATI: Come impostare le variabili d'ambiente in Bash su Linux
Lettura dell'input dell'utente
Oltre a creare variabili stringa il cui contenuto è definito come parte della loro dichiarazione, possiamo leggere l'input dell'utente in una variabile stringa.
Il comando read
legge l'input dell'utente. L'opzione -p
(prompt) scrive un prompt nella finestra del terminale. L'input dell'utente viene memorizzato nella variabile stringa. In questo esempio, la variabile è chiamata user_file
.
read -p "Apri quale file?" file_utente
eco $file_utente
Se non fornisci una variabile stringa per acquisire l'input, funzionerà comunque. L'input dell'utente verrà memorizzato in una variabile chiamata REPLY
.
read -p "Apri quale file?"
eco $RISPONDI
Di solito è più conveniente fornire la propria variabile e assegnarle un nome significativo.
Manipolazione di stringhe
Ora che abbiamo le nostre stringhe, siano esse definite al momento della creazione, lette dall'input dell'utente o create concatenando stringhe, possiamo iniziare a fare cose con esse.
Trovare la lunghezza della corda
Se è importante o utile conoscere la lunghezza di una stringa, possiamo ottenerla facendo precedere il nome della variabile da un cancelletto “ #
”.
my_string="Ci sono 39 caratteri in questa stringa."
eco ${#mia_stringa}

Estrazione di sottostringhe per offset di caratteri
Possiamo estrarre una sottostringa da una variabile stringa fornendo un punto iniziale all'interno della stringa e una lunghezza opzionale. Se non forniamo una lunghezza, la sottostringa conterrà tutto dal punto iniziale fino all'ultimo carattere.
Il punto iniziale e la lunghezza seguono il nome della variabile, con i due punti “ :
” tra di loro. Si noti che i caratteri in una variabile stringa sono numerati a partire da zero .
long_string="Frankenstein o il Prometeo moderno"
sottostringa=${stringa_lunga:0:12}
eco $sottostringa
eco ${stringa_lunga:27}
Un'altra variazione ti consente di scartare un numero di lettere dalla coda della stringa. In effetti, ti consente di impostare un punto di partenza e di utilizzare un numero negativo come lunghezza. La sottostringa conterrà i caratteri dal punto iniziale fino alla fine della stringa, meno il numero di caratteri specificato nel numero negativo.
my_string="alfabetico"
eco ${my_string:5:-4}
In tutti i casi la variabile stringa originale non viene modificata. La sottostringa "estratta" non viene effettivamente rimossa dal contenuto della variabile.
Estrazione di sottostringhe tramite delimitatore
Lo svantaggio dell'utilizzo degli offset dei caratteri è che è necessario sapere in anticipo dove si trovano le sottostringhe che si desidera estrarre all'interno della stringa.
Se la tua stringa è delimitata da un carattere ripetuto, puoi estrarre sottostringhe senza sapere dove si trovano nella stringa, né quanto sono lunghe.
Per eseguire la ricerca dalla parte anteriore della stringa, seguire il nome della variabile con segni di doppia percentuale, %%
, il carattere di delimitazione e un asterisco, *
. Le parole in questa stringa sono delimitate da spazi.
long_string="primo secondo terzo quarto quinto"
echo ${stringa_lunga%%' '*}
Questo restituisce la prima sottostringa dalla parte anteriore della stringa che non contiene il carattere delimitatore. Questa è chiamata opzione di sottostringa corta.
L'opzione sottostringa lunga restituisce la parte anteriore della stringa fino all'ultima sottostringa delimitata. In altre parole, omette l'ultima sottostringa delimitata. Sintatticamente, l'unica differenza è che utilizza un unico segno di percentuale " %
" nel comando.
long_string="primo secondo terzo quarto quinto"
echo ${stringa_lunga%' '*}
Come ti aspetteresti, puoi cercare allo stesso modo dalla fine della stringa. Invece di un segno di percentuale, usa un cancelletto " #
" e sposta il delimitatore in modo che venga dopo l'asterisco " *
" nel comando.
long_string="this.long.string.of.words.is.delimited.by.periods"
eco ${stringa_lunga##*.}
Questa è l'opzione della sottostringa corta, taglia la prima sottostringa che trova dalla parte posteriore della stringa che non contiene il delimitatore.
long_string="this.long.string.of.words.is.delimited.by.periods"
eco ${stringa_lunga#*.}
L'opzione sottostringa lunga restituisce la parte posteriore della stringa fino al primo delimitatore dalla parte anteriore della stringa. In altre parole, omette la prima sottostringa delimitata.
Sostituzione di sottostringa
Scambiare le sottostringhe con altre sottostringhe è facile. Il formato è il nome della stringa, la sottostringa che verrà sostituita e la sottostringa che verrà inserita, separati dai caratteri " /
" della barra.
string="il maialino blu ridacchia"
echo ${stringa/maiale/capra}
Per limitare la ricerca alla fine della stringa, far precedere la stringa di ricerca con un segno di percentuale “ %
”.
string="il maialino blu ridacchia"
echo ${stringa/%risatine/risatine}
Per limitare la ricerca all'inizio della stringa, far precedere la stringa di ricerca con un carattere hash “ #
”.
string="il maialino blu ridacchia"
echo ${stringa/#blu/giallo}
Una corda è una cosa flessibile
Se una stringa non è solo come la vorresti o ne hai bisogno, questi strumenti ti aiuteranno a riformattarla in modo che soddisfi le tue esigenze. Per trasformazioni complicate, usa le utilità dedicate, ma per i piccoli ritocchi usa i built-in della shell ed evita il sovraccarico del caricamento e dell'esecuzione di uno strumento esterno.
CORRELATO: Tutto ciò che avresti sempre voluto sapere sugli inode su Linux