Bash sed-如何根据图案替换线条?
我有一个Bash sed-如何根据图案替换线条?,bash,ubuntu,sed,Bash,Ubuntu,Sed,我有一个宏文件,其中包含以下变量定义: SLIBS+=# USERDEFINED $(shell $(NETCDF_PATH)/bin/nc-config --flibs) CFLAGS:= -gopt -Mlist -time 我正在尝试使用sed替换SLIBS+=和CFLAGS:=的内容 例如,我正在尝试替换 SLIBS+=# USERDEFINED $(shell $(NETCDF_PATH)/bin/nc-config --flibs) 与 通过使用此命令: sed -i "s:S
宏
文件,其中包含以下变量定义:
SLIBS+=# USERDEFINED $(shell $(NETCDF_PATH)/bin/nc-config --flibs)
CFLAGS:= -gopt -Mlist -time
我正在尝试使用sed
替换SLIBS+=
和CFLAGS:=
的内容
例如,我正在尝试替换
SLIBS+=# USERDEFINED $(shell $(NETCDF_PATH)/bin/nc-config --flibs)
与
通过使用此命令:
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
与
?您只是缺少一个regex子表达式来捕获“SLIBS+=之后的行中的任何其他内容”。因此,只有准确的
SLIBS+=
被替换,之后的文本被保留(看起来像是被追加了)
将sed命令替换为eg
sed -i 's:SLIBS+=.*:SLIBS+= ... :g' Macros
应该这样做(注意添加的*
以匹配任意数量的其他字符,以及'
以防止shell转义*
)
这种方法也适用于您的CFLAGS
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
sed -i 's:SLIBS+=.*:SLIBS+= ... :g' Macros