微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – sed不使用变量

我正在尝试编译我从Internet下载的大型项目,并且我有一个运行configure,make和make install的自定义脚本.问题是我想传递一些兼容性标志,但项目使用的libtool无法识别LDFLAGS,我必须找到另一种传递兼容性标志的方法.所以在运行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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐