我想替换以下行:
--memory 20g \
with
--memory 100g \
实际上它应该替换之后的任何数字--memory
。以下是我所拥有的,但无法获得预期的结果。
sed -i -E -- "s/\b--memory.*/--memroy 100g \/g" a.txt
您不需要此处的扩展正则表达式支持(-E
),POSIX-ly 你可以按如下操作。这个想法是你需要双重转义元字符\
使其成为字面意思
sed 's/--memory \(.*\) \\/--memory 100g \\/g' a.txt
或者如果你确定它会是20g
始终直接使用字符串。
sed 's/--memory 20g \\/--memory 100g \\/g' a.txt
使用的一个好处是\(.*\)
是允许您替换该位置可能发生的任何内容。这.*
是一个匹配任何东西的贪婪表达式,在 POSIX 中sed
(基本正则表达式)您需要将捕获的组转义为\(.*\)
而如果你对-E
启用标志(在 GNU/FreeBSD 上sed
)你可以这样做(.*)
。还可以使用正则表达式锚点^
, $
如果你想匹配精确的行而不让sed
在不需要的地方替换文本。与ERE相同的操作
sed -E 's/--memory (.*) \\/--memory 100g \\/g' file
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)