2010-06-10 16 views
8

Credo che questa potrebbe essere una semplice domanda, ma ho cercato ovunque e provato alcuni soluzioni alternative, ma non ho ancora risolto il problema.Sed non funziona all'interno di script bash

Problema Descrizione: devo sostituire un carattere all'interno di un file e posso farlo facilmente utilizzando la riga di comando:

sed -e 's/pattern1/pattern2/g' full_path_to_file/file 

Ma quando io uso la stessa linea all'interno di uno script bash non posso sembra essere in grado di sostituirlo, e non ricevo un messaggio di errore, solo il contenuto del file senza la sostituzione.

#!/bin/sh 

VAR1="patter1" 
VAR2="patter2" 

VAR3="full_path_to_file" 

sed -e 's/${VAR1}/${VAR2}/g' ${VAR3} 

Qualsiasi aiuto sarebbe apprezzato.

Grazie mille per il vostro tempo.

+0

sed -e non modifica il file, mostra solo il file con la substution, ma il file non viene modificato, in entrambi i casi – chmeee

risposta

17

Prova

sed -e "s/${VAR1}/${VAR2}/g" ${VAR3} 

Bash reference dice:

I caratteri '$' e '`' conservano il loro significato speciale all'interno di virgolette

Così sarà in grado di risolvere le tue variabili

0

Io uso uno script li ke tuo ... e anche il mio funziona!

#!/bin/sh 

var1='pattern1' 
var2='pattern2' 

sed -i "s&$var1&$var2&g" *.html 

Vedere che, il mio usano "-i" ... e il carattere separatore "&" che uso è diverso ai suoi. Il carattere separatore "&" può essere utilizzato con qualsiasi altro carattere che NON HANNO A DISEGNO.

È possibile utilizzare:

sed -i "s#$var1#$var2#g" *.html 

sed -i "[email protected][email protected][email protected]" *.html 

...

Se il mio modello è: "[email protected]", naturalmente, è necessario utilizzare un separatore diverso, come "#", "%" ... ok?