GNU/Linux >> Linux Esercitazione >  >> Linux

Sostituzione di String in Bash

Bash è un processo di comando compatibile con la shell UNIX il cui compito principale è manipolare le stringhe condotte in un ambiente shell. I programmatori sono talvolta chiamati a lavorare su file diversi. Possono aggiungere, eliminare e sostituire parti o l'intero file per adattarlo al loro lavoro. Ciò richiede la conoscenza della sostituzione di string in bash. La conservazione dei dati può essere temporanea o permanente, a seconda della natura dei dati stessi. La stringa del file è essenziale quando si sostituisce il contenuto del file.

Sostituzione della stringa in Bash

sed è vitale ed è utile per aiutare a sostituire le stringhe in un file con script bash. L'editor di stringhe può essere utilizzato in diversi modi per sostituire il contenuto dei file in bash. Un editor di stringhe alternativo ma sonoro è awk che può essere attivato quando si sostituisce il valore di stringa da un file usando bash. Questo articolo mostrerà con l'aiuto di esempi come il contenuto del file può essere sostituito in bash. Nota che la conoscenza dei modelli regex può anche essere di grande valore quando si sostituisce la stringa in bash.

Manipolazione delle stringhe Bash

Quando si effettuano sostituzioni minori o semplici, il sed non è richiesto. Bash può fare la manipolazione.

Ad esempio:
Quando si sostituisce un fosslinux.gif con .mp4, sed non è richiesto.
Per eseguire il processo utilizzando bash, utilizzare il testo codificato di seguito:

#/bin/bash
file_name="fosslinux.gif"
new_extension="mp4"

# Replace .gif with .mp4
generated_file_name=${file_name/.gif/.$new_extension}

echo $generated_file_name

Sostituzione di String utilizzando sed

sed può essere definito un editor di flussi. Sed può sostituire una stringa nei file. Diamo un'occhiata a un esempio di un file chiamato singleboardbytes.txt che contiene le seguenti informazioni:
Foss Linux è un ottimo sito di apprendimento per qualsiasi utente Linux. Dai un'occhiata agli articoli pubblicati da Foss Linux sul loro sito.

Ora dal nostro file, dobbiamo sostituire la parola "sito ” con “sito web ” e rinomina il file in fosslinux.txt .

Capire la sintassi sed

sed -i 's/search_string/replace_string/' filename
sed – is the command used in the execution of the above syntax
‘-i’ – used in the modification of contents in the original file with a replacement string aid whenever the search value exists in the file.
‘s’ – this is the substitute command
‘search_string’ – this represents the string value that is to be searched for replacement in the original file
‘replace_string’ – this represents the string value that is used to replace the searched value. The string should match the string found by the ‘search_string’ command.
‘filename’ – this is the filename whereby the replacement will be applied.

Esegui il seguente comando nel tuo terminale:

sed 's/site/website/g' singleboardbytes.txt > fosslinux.txt

Nota:puoi anche eseguire il comando sopra inserendolo come script bash.
Sostituzione usando -i comando

Dopo aver eseguito il comando, il passaggio successivo consiste nella sostituzione utilizzando -i comando. -io è una rappresentazione per "in place", il che significa che il file viene solo sostituito e non c'è creazione di file aggiuntivi. Utilizzando il nostro esempio sopra, esegui il seguente comando:

sed -i 's/site/website/g' singleboardbytes.txt

Dalla figura seguente, puoi vedere un punto esclamativo che dice:Il file "/home/tuts/singleboardbytes.txt è stato modificato su disco". questo mostra che le modifiche sono state apportate correttamente.

La figura seguente è il file contenente le modifiche apportate nel passaggio precedente, sia al nome del file (da singleboardbytes.txt a fosslinux.txt) che alla parola site è stato modificato nel sito web .

Utilizzo di una variabile come valori di ricerca e sostituzioni

Con un po' di interpolazione, le variabili possono essere usate per sostituire le stringhe. Il primo argomento sed, in questo caso, deve usare le virgolette doppie invece delle virgolette singole. Ad esempio, il tuo codice sarà simile a quello qui sotto:

tuts() {
local search=$1
local replace=$2

# Note the double quotes
sed -i "s/${search}/${replace}/g" singleboardbytes.txt
}

sed ha due versioni, vale a dire:il FreeBSD e Linux sed . Le distribuzioni Linux usano Linux sed mentre gli utenti OS X usano FreeBSD sed. Questi gusti sono abbastanza diversi, e quindi non è possibile trasferire comandi da un gusto sed all'altro.

Ad esempio, durante la sostituzione del contenuto del file utilizzando FreeBSD, è necessario eseguire un backup utilizzando l'estensione .bak. Oppure puoi avviare un backup con l'uso di coppie di virgolette vuote subito dopo la notazione -i come mostrato nella sintassi bash di seguito:

tuts() {
local search=$1
local replace=$2

sed -i "" "s/${search}/${replace}/g" singleboardbytes.txt
}

Se non viene eseguito un backup durante l'utilizzo di FreeBSD come illustrato nel codice di sintassi sopra, cadrai in un errore come quello mostrato di seguito:

sed: 1: "/Users/user/path/tuts ...": extra characters at the end of h command

Come sostituire un file e far corrispondere lo schema delle cifre usando il comando sed

Se esegui correttamente lo script, verrà eseguita una ricerca per tutto il contenuto numerico presente in un file. Quindi il contenuto verrà quindi sostituito aggiungendo $ prima dei numeri.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string containing digits and add $
sed -i 's/\b[0-9]\{5\}\b/$&/g' $1
fi

Sostituzione di una stringa usando il comando awk

In questo caso, useremo il comando awk invece del comando sed per sostituire il contenuto di un file. La differenza tra questi comandi è che il comando sed aggiorna direttamente il file originale, il che non è il caso del comando awk.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string based on date
awk '{sub("02/06/2020","12/06/2020")}1' $1 > temp.txt && mv temp.txt $1
fi

Conclusione

Gli esempi precedenti sono vitali per i tuoi progressi nell'apprendimento di come sostituire una stringa in Bash. Pertanto, per essere bravo, dovrai esercitarti regolarmente. La ricerca e la sostituzione di una stringa in un file potrebbe sembrare complessa, ma la troverai molto più gestibile se segui correttamente le nostre linee guida.

Un punto da notare è che l'esecuzione dei comandi a volte potrebbe sembrare più gestibile, ma dovresti fare attenzione a non devastare sed. Quando inserisci i comandi sbagliati, romperai il tuo computer, causandoti più problemi come la perdita di dati. Quindi, per sicurezza, copia e incolla sempre il codice così com'è sul tuo terminale. Ciò eviterà errori di ortografia che potrebbero danneggiare la tua macchina. Ci auguriamo che questo articolo ti abbia aiutato a imparare come sostituire una stringa in bash usando questo articolo.


Linux
  1. Utilizzando un riferimento a una variabile di stringa Bash in Sed?

  2. Come posso aggiungere una stringa all'inizio di ogni file in una cartella in bash?

  3. linux bash, stringa camel case da separare con un trattino

  4. Cosa fa 'bash -c'?

  5. lo script bash aggiunge il testo alla prima riga di un file

Bash:aggiungi al file

35 Esempi di script Bash

Bash Scripting – Manipolazione di stringhe

Scripting Bash(III)

Sostituzione di una sottostringa con un'altra stringa in Bash

Come utilizzare Sed per trovare e sostituire una stringa in un file