将 sed 文件重定向到新名称下的另一个目录

将 sed 文件重定向到新名称下的另一个目录

我有一个$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"

(你也应该总是引用你的变量正如我上面所做的那样)

相关内容