<"$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 命令。