2010-06-10 22 views
8

Creo que esta puede ser una pregunta simple, pero he buscado en todas partes y he intentado algunas soluciones, pero todavía no he resuelto el problema.Sed no funciona dentro de script bash

Problema Descripción: tengo que reemplazar un carácter dentro de un archivo y puedo hacerlo fácilmente utilizando la línea de comandos:

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

Pero cuando se utiliza la misma línea dentro de una escritura del golpe no puedo parece ser capaz de reemplazarlo, y no aparece un mensaje de error, solo el contenido del archivo sin la sustitución.

#!/bin/sh 

VAR1="patter1" 
VAR2="patter2" 

VAR3="full_path_to_file" 

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

Cualquier ayuda sería apreciada.

Muchas gracias por su tiempo.

+0

sed -e no cambia el archivo, simplemente muestra el archivo con la substución, pero el archivo no se cambia, en ambos casos – chmeee

Respuesta

17

Trate

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

Bash reference dice:

Los caracteres '$' y ''' conservar su significado especial dentro de comillas dobles

lo tanto, será capaz de resolver sus variables

0

uso un script li ke tuyo ... ¡y el mío también!

#!/bin/sh 

var1='pattern1' 
var2='pattern2' 

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

ver eso, el uso de minas "-i" ... y el carácter separador "&" yo uso es diferente que el suyo. El carácter separador "&" se puede usar con cualquier otro carácter que NO HAY EN EL PATRÓN.

que puede utilizar:

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

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

...

Si mi patrón es: "[email protected]", por supuesto, debe utilizar un separador diferente, como "#", "%" ... ¿Okay?

Cuestiones relacionadas