【发布时间】:2016-06-25 12:33:29
【问题描述】:
有很多问题询问如何在 sed 模式中使用变量,例如:sed "s/re/$VAR/" file,但我想对变量执行替换。到目前为止,我一直在使用echo 来做到这一点:
echo "$VAR" | sed 's/re/new/'
但是,虽然这可行,但它看起来很乱。在 bash 或 zsh 中是否有更简单/更优雅的方法?
【问题讨论】:
-
如果需要是正则表达式,我觉得没有别的办法了。对于simple replacements(在
bash)你可以做echo ${VAR/match/replace} -
我同意肖恩的观点,这并不混乱,因为这是要走的路。或者您可以使用特定的 shell 技巧(用于 bash 或 zsh)
-
@zmo,嗯?肖恩的建议(我同意这并不混乱)就是您所说的“特定于外壳的技巧”。 (手头的特定 PE 实际上根本不是 bash 和 zsh 特定的——相反,它们最初是 ksh 行为,至少可以追溯到 ksh88,bash 和 zsh 都兼容。值得注意的是, ksh88 早于 POSIX sh 标准的发布,因此即使 POSIX sh 标准没有包括 ksh 所做的所有 PE,它们的含义已经非常成熟)。