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

bla*_*ury 8 unix linux sed

我想替换以下行:

--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)

Ini*_*ian 6

你不需要这里扩展的正则表达式支持(-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)

  • @EdMorton:不是这次Ed,我在问题中标记了meta帖子.mods会看看他的行为.谢谢你补充Ed.现在是时候有人警告他的行为了 (3认同)
  • 这只是@jww,直到他通常的古怪伎俩,对他不喜欢的问题的每一个答案都进行了贬低. (2认同)