我有一个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都是字符串。
答案 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