Come sostituire una stringa in un file in bash

Come sostituire una stringa in un file in bash

Come programmatore, potrebbe essere necessario lavorare con diversi tipi di file per archiviare i dati temporaneamente o permanentemente. A volte, potrebbe essere necessario sostituire parte del file o modificare il contenuto particolare del file. Per sostituire il contenuto in un file, è necessario cercare la stringa di file particolare. IL 'Sed' Il comando viene utilizzato per sostituire qualsiasi stringa in un file usando uno script bash. Questo comando può essere utilizzato in vari modi per sostituire il contenuto di un file in bash. IL 'Awk'Il comando può anche essere utilizzato per sostituire la stringa in un file. Questo tutorial ti mostrerà come sostituire qualsiasi valore di stringa da un file usando uno script bash.

01. Sintassi generale per sed
02. Sostituisci la stringa in file con script bash sed
03. comandi sed g e i per insensibili globali e casi
04. Matching sed cifra
05. Sintassi generale per AWK
06. Sostituisci la stringa in file con script bash awk
07. Sostituisci la stringa in file con script puro bash
08. Sostituisci la stringa in file con perl un fodera

Dati di esempio per la sostituzione della stringa bash

Un file di testo chiamato Saldi.TXT Con il seguente contenuto viene creato per mostrare le operazioni di sostituzione.
Saldi.TXT

Area importo della data
01/01/2020 60000 Dhaka
10/02/2020 76000 Rajshahi
21/03/2020 54000 Khulna
15/04/2020 78000 Chandpur
17/05/2020 45000 Bogra
02/06/2020 67000 Comilla

Sintassi generale per SED: sostituire la stringa in un file

La sintassi di base del 'sed'Il comando per la sostituzione della stringa particolare in un file è riportato di seguito.

Sintassi

Sed -i 'S/Search_String/Sostituzione_string/' FileName

Di seguito ogni parte della sintassi sopra è spiegata.

'-io' L'opzione viene utilizzata per modificare il contenuto del file originale con la stringa di sostituzione se la stringa di ricerca esiste nel file.
'S' indica il comando sostitutivo.
'stringa di ricerca' contiene il valore stringa che verrà ricercato nel file per la sostituzione.
'sostituire_string' contiene il valore della stringa che verrà utilizzato per sostituire il contenuto del file che corrisponde 'stringa di ricerca' valore.
'nome del file' contiene il nome file in cui verranno applicati la ricerca e la sostituzione.

Esempio 1: sostituire il file con il comando "sed"

Nel seguente script, il testo di ricerca e retrovisore verrà preso dall'utente. Se la stringa di ricerca esiste nelle vendite.txt ', quindi verrà sostituito dalla stringa di sostituzione. Qui, verrà eseguita una ricerca sensibile al caso.

#!/Bin/Bash
# Assegna il nome file
FileName = "Vendite.TXT"
# Prendi la stringa di ricerca
Leggi -p "Immettere la stringa di ricerca:" Search
# Prendi la stringa di sostituzione
Leggi -P "Immettere la stringa di sostituzione:" Sostituisci
Se [[$ Search != "" && $ sostituire != ""]]; Poi
Sed -i "S/$ Search/$ SPOSTA/" $ fileName
fi

Produzione:

Esempio 2: sostituire il file con il comando 'sed' con flag 'g' e 'i'

Il seguente script funzionerà come l'esempio precedente, ma la stringa di ricerca verrà cerca a livello globale per il flag "G" e la ricerca insensibile al caso verrà effettuata per il flag "i".

#!/Bin/Bash
# Prendi la stringa di ricerca
Leggi -p "Immettere la stringa di ricerca:" Search
# Prendi la stringa di sostituzione
Leggi -P "Immettere la stringa di sostituzione:" Sostituisci
Se [[$ Search != "" && $ sostituire != ""]]; Poi
sed -i "s/$ search/$ sostituta/gi" $ 1
fi

Produzione:

Esempio 3: sostituire il file con il comando "sed" e il modello di cifra corrispondente

Il seguente script cercherà tutto il contenuto numerico in un file e sostituirà il contenuto aggiungendo il '$' simbolo all'inizio dei numeri.

#!/Bin/Bash
# Controllare che il valore dell'argomento della riga di comando esista o no
Se [$ 1 != ""]; Poi
# Cerca tutte le stringhe contenenti cifre e aggiungi $
sed -i 's/\ b [0-9] \ 5 \ \ b/$ &/g' $ 1
fi

Produzione:

Sostituisci la stringa in un file con comando 'awk'

IL 'awk ' Il comando è un altro modo per sostituire la stringa in un file, ma questo comando non può aggiornare il file originale direttamente come il 'sed ' comando.

Esempio 4: sostituire il file con "awk"

Il seguente script memorizzerà il contenuto aggiornato in temp.TXT file che verrà rinominato dal file originale.

#!/Bin/Bash
# Controllare che il valore dell'argomento della riga di comando esista o no
Se [$ 1 != ""]; Poi
# Cerca tutta la stringa in base alla data
awk 'sub ("02/06/2020", "12/06/2020") print' $ 1> temp.txt && mv temp.txt $ 1
fi

Produzione:


Nell'esempio sopra il comando 'awk' viene utilizzato per cercare una stringa "02/06/2020", che è l'ultima data nel nostro file di esempio. La stringa abbinata verrà sostituita da una nuova stringa "12/06/2020". La stringa risultante sia sostituita o meno è stampata su ogni riga.

Esempio 5: sostituire la stringa in file con script puro bash

In questo esempio faremo lo stesso lavoro con un bash mentre loop e un comando di sostituzione della stringa bash. Scriveremo l'output a un tmp archiviare e sostituire l'originale alla fine dello script. Vedi il codice qui sotto:

#!/Bin/Bash
mentre la riga di lettura; Fare
# Sostituisci tutti i casi sulla linea di Khulna con Dhaka
echo $ riga // khulna/dhaka
Fatto < Sales.txt > /TMP/Vendite.o.TXT
MV /TMP /Vendite.o.Vendite TXT.TXT

Puoi vedere il comando Echo eseguirà una sostituzione nella variabile di riga, poiché lo script legge ogni riga nel file di testo e sostituire tutte le istanze di Khulna con la nuova stringa Dhaka. Il loop while legge dal file di input Saldi.TXT e scrive nel file di output /TMP/Vendite.o.TXT. Infine il file di output temporaneo sostituisce il file originale con il MV comando.

Produzione:

Esempio 6: sostituire la stringa in file con perl un fodera

Questo compito è in realtà super semplice con Perl. Perl è un linguaggio vecchio, meno popolare ma estremamente potente. Questo può essere fatto con un comando di riga nella riga di comando bash:

Perl -pi.BAK -E 'S/DHAKA/BOGRA/G' Vendite.TXT

-pi.Bak dice a Perl di elaborare il file in atto e anche creare un file di backup con il .Estensione del bak. La sostituzione sarà tutte istanze di Dhaka per Bogra Come il nuovo testo. Qui puoi vedere il facile output di questo comando:

PRODUZIONE:

Conclusione

Questo articolo ha mostrato come utilizzare gli script bash per sostituire le stringhe in un file con ricerca e sostituire sulla riga di comando in bash. Esistono molti modi per farlo, anche con comandi sed, awk, perl; Puoi usare script nativi bash con loop e regex e ci sono altri modi anche non discussi qui. Bash e Linux hanno molti modi per fare lo stesso lavoro.