![Linux shell 脚本:复制(文本)文件并用路径替换标记](https://linux22.com/image/1299827/Linux%20shell%20%E8%84%9A%E6%9C%AC%EF%BC%9A%E5%A4%8D%E5%88%B6%EF%BC%88%E6%96%87%E6%9C%AC%EF%BC%89%E6%96%87%E4%BB%B6%E5%B9%B6%E7%94%A8%E8%B7%AF%E5%BE%84%E6%9B%BF%E6%8D%A2%E6%A0%87%E8%AE%B0.png)
我需要创建一个文本文件,其中的部分内容应由任意路径替换。我想通过复制模板文件,然后替换特殊模式(例如,${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
(我不确定我的样本是否正确,但你明白我的意思。)