我有一个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
答案 0 :(得分:1)
您只是错过了一个正则表达式子表达式来捕获" SLIBS+=
"之后的其他内容。因此,只有正好 SLIBS+=
被替换,之后的文本仍然存在(所以看起来就像是附加的)。
用例如
替换你的sed命令sed -i 's:SLIBS+=.*:SLIBS+= ... :g' Macros
应该这样做(注意添加的.*
匹配任意数量的其他字符和'
以防止shell转义*
。)
此方法也适用于您的CFLAGS
。