替换常量的Bash脚本生成两个文件

时间:2014-09-17 23:13:46

标签: bash shell unix

我有一个bash脚本,用于替换目录中html,js和css文件中的一组常量。

它工作正常,但由于某种原因,它会在文件类型上创建一个后缀为“-e”的附加文件。

例如,“index.html”将成为“index.html-e”。它还会创建一个名为“index.html”的文件。这两个文件看起来都是一样的。

html的有问题的代码行是:

 find . -name "*.html" -exec sed -i -e "s/#$KEY/$VALUE/g" {} \;

其中$ KEY和$ VALUE都是字符串。

3 个答案:

答案 0 :(得分:2)

sed的某些实施需要-i之后的备用扩展程序。因此,创建的文件是替换之前的原始文件。您可以指定更常见的备用扩展程序,即~

sed -i~ -e "..."

顺便说一句,要验证这两个文件是否相同,请尝试

diff index.html index.html-e

答案 1 :(得分:1)

鉴于您对结果的描述,我怀疑您运行的命令不是:

find . -name "*.html" -exec sed -i -e "s/#$KEY/$VALUE/g" {} \;

而是

find . -name "*.html" -exec sed -i-e "s/#$KEY/$VALUE/g" {} \;

-e作为扩展名传递给-i,然后将该脚本用作默认参数。

哦,或者@choroba说如果那个空间确实在那里(我不知道sed实现那样工作但是这肯定会解释你所看到的行为,而不会假设你的问题有转录错误这里)。

答案 2 :(得分:0)

我遇到的解决方法是删除创建的备份(由@choroba指出)。完成如下:

find . -name "*.html-e" -type f|xargs rm -f
find . -name "*.js-e" -type f|xargs rm -f
find . -name "*.css-e" -type f|xargs rm -f