sed 的正则表达式抓取多行或更好的方法?

LF4*_*LF4 5 bash regex sed

我正在创建一个连接到服务器并将输出转储到临时文件的脚本。我想在脚本中使用 sed 从临时文件中获取特定信息。输出总是有 80 个字符的虚线,然后是我想要的信息,然后是 Disconnected 语句。

如果它只是一行,我已经得到了一个正则表达式,问题是我如何对换行符进行分组?

正则表达式

-\{80\}[\r\n]*\(.*\)[\r\n]\{4\}Disconnected
Run Code Online (Sandbox Code Playgroud)

文件

...
--------------------------------------------------------------------------------
The information that I want to get can be a single line or multiple lines.
Another line to grab.

And this should be caught as well.

Disconnected ...
Run Code Online (Sandbox Code Playgroud)

期望输出

The information that I want to get can be a single line or multiple lines.
Another line to grab.

And this should be caught as well.
Run Code Online (Sandbox Code Playgroud)

hmo*_*liu 6

首先使用“-n”标志来抑制自动输出。接下来使用 sed地址引用您感兴趣的部分(从破折号“---”到带有“Disconnected”一词的行)。最后打印模式空间(所有模式空间,因为您对其中的所有内容都感兴趣)。

~$ sed -n '/^---*/,/Disconnected/{p}' inputfile
Run Code Online (Sandbox Code Playgroud)

由于 LF4 要求从结果中删除带破折号的行而进行编辑。

使用“地址”引用单个模式空间。所以你可以对这些单独的模式空间做任何你想做的事情。包括通过正则表达式删除行。在示例中,该命令从模式空间中删除由破折号形成的行,从而产生您正在寻找的输出:

~$ sed -n '/^---*/,/Disconnected/{/^---*/d;p}' inputfile
Run Code Online (Sandbox Code Playgroud)

HTH