2010-06-10 136 views
8

我认为这可能是一个简单的问题,但我已到处寻找并尝试了一些解决方法,但我仍然没有解决问题。Sed在bash脚本里面不工作

问题描述:我 要替换文件中的字符,我可以很容易使用命令行来完成:

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

但是当我使用同一条线路bash脚本里面我不能似乎能够替换它,并且我没有收到错误信息,只是没有替换的文件内容。

#!/bin/sh 

VAR1="patter1" 
VAR2="patter2" 

VAR3="full_path_to_file" 

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

任何帮助,将不胜感激。

非常感谢您的时间。

+0

sed -e不会更改文件,只是使用substution显示文件,但文件不会更改,无论是哪种情况 – chmeee 2010-06-10 15:11:39

回答

17

尝试

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

Bash reference说:

字符 '$' 和 ''' 保留双引号

因此中仍然具有特殊意义,将能解决你的变量

0

我用脚本li你的......和我的作品一样好!

#!/bin/sh 

var1='pattern1' 
var2='pattern2' 

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

看到的是,雷用“-i” ......和分隔符字符“&”我用的是你的不同。 分隔符“&”可以用于任何其他不具备PATTERN的字符。

您可以使用:

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

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

...

如果我的模式是: “[email protected]” 当然,你必须使用一个不同的分隔符,如 “#”, “%” ... 好?