gpt4 book ai didi

regex - sed 不使用变量

转载 作者:IT王子 更新时间:2023-10-29 00:58:01 25 4
gpt4 key购买 nike

我正在尝试编译一个从 Internet 下载的大型项目,并且我有一个运行 configure、make 和 make install 的自定义脚本。问题是我想传递一些兼容性标志,但该项目使用不识别 LDFLAGS 的 libtool,我必须找到另一种方法来传递我的兼容性标志。所以在运行 configure 后的脚本中,我的代码如下所示:

COMPATFLAG="-gcc-name=/usr/local/gcc-4.2.1/bin/gcc"
sed -i "s/CC -shared/CC -shared ${COMPATFLAG}/g" libtool

${COMPATFLAG} 可能会根据正在编译的平台获得不同的值,因此我无法将其以明文形式放入 sed 语句中。问题是它不起作用 - 我得到一个空白区域而不是 ${COMPATFLAG} 的值。如果我改为编写 sed -i "s/CC -shared/CC -shared TEST/g"libtool,它会将字符串“TEST”添加到文件中。如果我使用单引号,我得到的是 ${COMPATFLAG} 字符串,而不是变量的值。如果我尝试导出 ${COMPATFLAG} 它仍然不起作用。我不知道为什么会出错。有什么想法吗?

最佳答案

由于 COMPATFLAG 确实有正斜杠,您应该在 sed 中使用不同的正则表达式分隔符:

sed -i "s#CC -shared#& ${COMPATFLAG}#g" libtool

此外,我在这里使用了 # 以避免在替换模式中重复匹配的字符串。

感谢@JonathanLeffler 提供的这个技巧,您甚至可以使用控制字符作为正则表达式分隔符:

sed -i "s^GCC -shared^G& ${COMPATFLAG}^Gg" libtool

在 shell 中输入 ^G 作为 ctrl-V-G

关于regex - sed 不使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18494105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com