gpt4 book ai didi

bash - sed - 如何根据模式替换线?

转载 作者:行者123 更新时间:2023-12-04 19:13:14 26 4
gpt4 key购买 nike

我有一个 Macros文件,除其他外,变量定义如下:

SLIBS+=# USERDEFINED $(shell $(NETCDF_PATH)/bin/nc-config --flibs)

CFLAGS:= -gopt -Mlist -time

我正在尝试替换 SLIBS+= 的内容和 CFLAGS:=使用 sed .

例如,我正在尝试替换
SLIBS+=# USERDEFINED $(shell $(NETCDF_PATH)/bin/nc-config --flibs)


SLIBS+= -L/sw/arcts/centos7/netcdf/4.4.1/pgi-16.4-hdf5-1.8.16/lib -lnetcdff -L/sw/arcts/centos7/netcdf/4.4.1/pgi-16.4-hdf5-1.8.16/lib -L/sw/arcts/centos7/hdf5/1.8.16-pgi-16.4/lib -lnetcdf -lnetcdf -llapack -lblas

通过使用此命令:
sed -i "s:SLIBS+=:SLIBS+= -L/sw/arcts/centos7/netcdf/4.4.1/pgi-16.4-hdf5-1.8.16/lib -lnetcdff -L/sw/arcts/centos7/netcdf/4.4.1/pgi-16.4-hdf5-1.8.16/lib -L/sw/arcts/centos7/hdf5/1.8.16-pgi-16.4/lib -lnetcdf -lnetcdf -llapack -lblas:g" Macros

但新内容是 附加 到旧内容,而不是 替换 旧的内容。

我究竟做错了什么?

另外,我怎么能对 CFLAGS 做同样的事情?变量,替换
CFLAGS:= -gopt -Mlist -time


CFLAGS:= -gopt -Mlist -time -I/sw/arcts/centos7/netcdf/4.4.1/pgi-16.4-hdf5-1.8.16/include -I/sw/arcts/centos7/hdf5/1.8.16-pgi-16.4/include

?

最佳答案

您只是缺少一个正则表达式子表达式来捕获“SLIBS+= 之后的任何其他内容”。结果,只有 SLIBS+=正在被替换,之后的文本仍然存在(看起来像是被附加了)。

用例如替换您的 sed 命令。

sed -i 's:SLIBS+=.*:SLIBS+= ... :g' Macros

应该可以解决问题(注意添加的 .* 以匹配任意数量的其他字符和 ' 以防止外壳转义 * )。

这种方法应该适用于您的 CFLAGS也是。

关于bash - sed - 如何根据模式替换线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47297653/

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