求助:sed命令替换--memory后任意数值未达预期的问题
解决sed替换
--memory后任意数值的问题 我来帮你排查问题并给出正确的解决方法,你的命令里有几个明显的错误导致没有达到预期效果:
你的命令存在的问题
- 拼写错误:你把
--memory写成了--memroy,sed根本找不到要匹配的内容 - 正则表达式范围过大:
\b--memory.*会匹配从--memory开始到行尾的所有内容,这会把后面的反斜杠\也一起替换掉,不符合你的需求 - 替换字符串和标记位置错误:你把全局替换标记
g写在了替换字符串里(\/g),这会导致替换后的内容多出/g,正确的位置应该放在sed替换命令的最后(s/.../.../g)
正确的sed命令
根据你的需求——替换--memory后面的任意数值为100g,这里分两种场景给出命令:
场景1:只替换整数数值(如20g、50g)
sed -i -E 's/(--memory\s+)[0-9]+g/\1100g/' a.txt
- 解释:
(--memory\s+):用捕获组保留--memory和后面的一个/多个空格,后续用\1引用这部分内容[0-9]+g:匹配整数数值加上单位g- 替换为
\1100g:保留前面的--memory和空格,把数值替换成100g
场景2:支持替换小数数值(如20.5g、30.8g)
如果需要兼容带小数点的内存值,把正则里的数值匹配部分改成支持小数:
sed -i -E 's/(--memory\s+)[0-9]+(\.[0-9]+)?g/\1100g/' a.txt
跨平台注意事项
如果你是在macOS(BSD sed)上执行命令,-i选项需要加上空字符串来避免自动添加备份后缀:
sed -i '' -E 's/(--memory\s+)[0-9]+g/\1100g/' a.txt
测试示例
假设你的a.txt内容如下:
run.sh --memory 20g \ start.py --memory 30.5g \
执行命令后,文件内容会变成:
run.sh --memory 100g \ start.py --memory 100g \
内容的提问来源于stack exchange,提问作者blackfury
相关产品推荐
相关产品推荐

