正则expression式为sed抓多行或更好的方法?

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

我得到了一个正则expression式的工作,如果它只是一个单一的线,麻烦是我怎么分组换线?

正则expression式

-\{80\}[\r\n]*\(.*\)[\r\n]\{4\}Disconnected 

文件

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

期望的输出

 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. 

首先使用'-n'标志来抑制自动输出。 接下来使用sed 地址来引用你感兴趣的部分(从破折号“—”直到有“断开”字样的行)。 最后打印模式空间(所有的模式空间,因为你对其中的一切感兴趣)。

 ~$ sed -n '/^---*/,/Disconnected/{p}' inputfile 

因为LF4请求从结果中删除破折号的行。

用“地址”引用个别图案空间。 所以你可以做任何你想要的个人模式空间。 包括通过正则expression式删除行。 在该示例中,该命令从模式空间中删除由破折号组成的行,从而生成要查找的输出:

 ~$ sed -n '/^---*/,/Disconnected/{/^---*/d;p}' inputfile 

HTH

sed可以通过将它们连接成为“hold space”来查找多行中的模式,如下所示:

 $ sed -n '1h;1!H;${;g;s/.*\(-\{80\}.*Disconnected\).*/\1/p;}' file 
  • 1h :复制第一行以保存空间
  • 1!H :从第二行开始追加空格
  • $ :最后一行
  • g :将保留空间复制到模式缓冲区
  • s/pattern/substitution/ :search和replace
  • \1 :返回参考模式中的组
  • p :打印

最简单,但不是非常有效的方法是

  1. 使用tr删除所有换行符。

     tr '\n' ' ' 
  2. 在与sed的\a命令Disconnected后重新添加换行符。

  3. 使用您的sed命令parsing数据。