如何解决<"$fileVariableName"> 在 csh 中做什么?
我正在 cshell 中使用 sed 命令查看现有脚本,除了一个组件之外,我了解所有脚本。为了分享一个例子,我已经简化了它,但在下面,$templateFile 被用作输入,所有“hello”的实例都被替换为“world”,一旦完成,它被输出到输出目录并命名为输出文件名。
sed -e 's:hello:world:g' <"$templateFile"> "$outputDir"/"$outputFileName".txt
但是,我不明白“$templateFile”周围的 在做什么?为什么 sed 输入文件需要 ?在对 sed 的所有描述中,我找不到解释这可能用于什么目的,所以我有点困惑。
我知道这是一个简单的问题,但我无法在网上找到答案,如果您能在这里得到任何澄清,我将不胜感激。谢谢。
解决方法
您正在审查的代码误导性地使用了空格。更具可读性的版本可能如下所示:
sed -e 's:hello:world:g' <"$templateFile" >"$outputDir/$outputFileName.txt"
像往常一样,<infile
将标准输入从 infile
重定向,>outfile
将标准输出重定向到 outfile
。
像其他重定向一样,所有这些都发生在 sed
甚至开始之前; sed
本身不影响或控制 shell 如何解释命令的这些部分。
<
和 >
是 stream redirection operators。
您不需要 <
运算符,因为 sed
在 sed 命令之后接受文件名参数。
如果您打算将 sed 替换结果保存在新文件中,则需要 >
。如果您想“内联”保存文件内容,也没有义务使用 >
。使用 GNU sed
,您可以
sed -i 's:hello:world:g' "$templateFile"
有了免费的 BSD sed
,你可以做到
sed -i '' 's:hello:world:g' "$templateFile"
检查 sed edit file in place 问题。
您也不需要 -e
,它只表示下一个参数是 sed 命令。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。