【发布时间】:2018-05-28 05:52:14
【问题描述】:
我想替换下面这行:
--memory 20g \
与
--memory 100g \
实际上它应该替换--memory之后的任何数字。以下是我所拥有的,但无法获得预期的结果。
sed -i -E -- "s/\b--memory.*/--memroy 100g \/g" a.txt
【问题讨论】:
我想替换下面这行:
--memory 20g \
与
--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
【讨论】:
\(.*\)请在你给出的答案中。