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