我需要创建一个文本文件,其中的部分内容应由任意路径替换。我想通过复制模板文件,然后替换特殊模式(例如,${MY_PATH}
用任意路径替换)来实现这一点(我希望不需要引用)。如何替换部分(sed
到目前为止我看到的示例似乎由于任意路径而存在问题)。
答案1
这替代品不需要太多引用:仅需反斜杠和正则表达式分隔符。为了方便起见,后者通常可以任意选择 - 在许多程序中,可以使用 s|...|...| 或类似名称来代替 s/.../.../。
假设路径是$path
,您可以执行以下操作:
epath=${path//'\'/'\\'}
epath=${epath//'|'/'\|'}
sed "s|\${MY_PATH}|$epath|g" < in > out
或者如果你不害怕其他语言,你可以使用:
perl -e 'my $path = shift(@ARGV); while (<STDIN>) {s|\$\{MY_PATH\}|$path|g; print}' "$path" < in
(我不确定我的样本是否正确,但你明白我的意思。)