我正在创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 :打印 最简单,但不是非常有效的方法是
使用tr删除所有换行符。
tr '\n' ' '
在与sed的\a命令Disconnected后重新添加换行符。
sed命令parsing数据。