我想替换以下行:
--memory 20g \
与
--memory 100g \
实际上它应该替换--memory
之后的任何数字。以下是我所拥有的,但无法获得预期的结果。
sed -i -E -- "s/\b--memory.*/--memroy 100g \/g" a.txt
答案 0 :(得分:6)
您不需要此处的扩展正则表达式支持(-E
),POSIX-ly您可以执行以下操作。这个想法是你需要双重转义元字符\
以使它成为文字
sed 's/--memory \(.*\) \\/--memory 100g \\/g' a.txt
或者如果您确定它将始终为20g
,请直接使用该字符串。
sed 's/--memory 20g \\/--memory 100g \\/g' a.txt
使用\(.*\)
的一个优点是允许您替换在该位置可能发生的任何事情。 .*
是一个贪婪的表达式来匹配任何东西,并且在POSIX sed
(基本正则表达式)中,您需要将捕获的组转义为\(.*\)
,而如果您对{{1}执行相同操作启用了标志(在GNU / FreeBSD -E
上)你可以sed
。如果你想匹配确切的行而不是让(.*)
替换你不需要的地方的文本,也可以使用正则表达式锚点^
,$
。与ERE相同的操作
sed