首页 > 解决方案 > 如何在 bash/sed 中替换采用 shell 变量形式的字符串文字?

问题描述

我熟悉sed在文件中就地替换的能力,如此处回答:sed edit file in place

IEsed -i 's/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g' filename

我无法将此概念扩展为替换采用 shell 变量形式的字符串文字——如何做到这一点?

举个例子来说明:
给定文件file.txt

# file.txt
set(FOO ${FOO})

...和 ​​shell 环境变量 ${FOO}:

$ FOO=bar
$ echo ${FOO}
bar

...我如何使用 sed 将字符串文字“${FOO}”替换file.txt为 shell 变量的值,${FOO}即“bar”?即我希望得到的内容file.txt是:

# file.txt
set(FOO bar)

我有一个思维障碍,想过去明显不正确的事情sed -i 's/${FOO}/${FOO}/g' file.txt

sed由于过去的经验,我倾向于,并且sed出于同样的原因可能更喜欢以-为中心的答案。但是任何解决方案都可能是可以的,但如果 shell-native,则优先考虑 POSIX 合规性。更具体地说,这将在一个带有debian-10.3基础的 docker 容器中运行......所以我认为适用于该发行版中包含的任何工具的解决方案也应该没问题。

标签: bashsedreplacein-place

解决方案


推荐阅读