用包含空格的字符串替换空格和反斜杠行

时间:2018-05-28 05:52:14

标签: linux unix sed

我想替换以下行:

--memory 20g \

--memory 100g \

实际上它应该替换--memory之后的任何数字。以下是我所拥有的,但无法获得预期的结果。

sed -i -E -- "s/\b--memory.*/--memroy 100g \/g"  a.txt

1 个答案:

答案 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