sed 用捕获组替换行

zje*_*aar 5 sed

sed 是否可以用正则表达式中的捕获组替换一行?

我有这个正则表达式,请注意这是固定的,我无法更改它。

simple sample(.*)

这就是我要的:

This is just a simple sample line with some text
Run Code Online (Sandbox Code Playgroud)

改成:

line with some text
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西:

sed '/simple sample \(.*\)/c \1'
Run Code Online (Sandbox Code Playgroud)

现在输出:

1
Run Code Online (Sandbox Code Playgroud)

有人知道您是否可以在 sed 中使用带有更改行功能的捕获组吗?

Mic*_*hrs 5

像这样?

echo "This is just a simple sample line with some text" | \
  sed 's/simple sample \(.*\)/\n\1/;s/.*\n//'
Run Code Online (Sandbox Code Playgroud)

这个想法很简单:用换行符前面的捕获组替换整个正则表达式匹配。然后将包括第一个换行符在内的所有内容替换为空。当然,您可以使用换行符以外的标记。

  • 是的 :-)。你能解释一下最后一节发生了什么吗? (2认同)