我有一个$template
将调用sed
来做一些模板的文件。完成此操作后,我想将新$template
文件重定向到另一个名为 的目录output
,新文件名为newtemplate
.
我的 shell 脚本的一部分:
sed -r -i.bak -e "{
# templating done here.
}" $template > $data/$newtemplate
这成功地$newtemplate
在$output
目录中创建了一个文件,但它不调用 sed 或执行任何模板化。
简而言之,我如何在文件sed
上使用$template
,然后获取模板化文件并将其重定向到output
新名称下的目录newtemplate
答案1
选项-i
意味着sed
它不会产生任何输出。相反,它会就地修改原始文件。所以你的命令工作正常,它正在做任何事情#templating
,但它正在做$template
,没有输出。由于没有输出,> $data/$newtemplate
只是创建一个空文件。
如果您不想影响原始$template
文件,而是希望将命令的输出sed
打印到标准输出,从而打印到将标准输出重定向到 with 的文件中> $data/$newtemplate
,那么您需要删除该-i
选项:
sed -r -e "{
# templating done here.
}" "$template" > "$data/$newtemplate"
(你也应该总是引用你的变量正如我上面所做的那样)