Bash

sed 的正則表達式來抓取多行還是更好的方法?

  • November 20, 2014

我正在創建一個連接到伺服器並將輸出轉儲到臨時文件的腳本。我想在腳本中使用 sed 從臨時文件中獲取特定資訊。輸出總是有 80 個字元的虛線,然後是我想要的資訊,然後是 Disconnected 語句。

如果它只是一行,我已經得到了一個正則表達式,問題是我如何對換行符進行分組?

正則表達式

-\{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地址引用您感興趣的部分(從破折號“—”到包含單詞“Disconnected”的行)。最後列印模式空間(所有模式空間,因為您對其中的所有內容都感興趣)。

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

由於 LF4 請求從結果中刪除帶有破折號的行,因此進行了編輯。

使用“地址”,您可以引用單個模式空間。因此,您可以對這些單獨的模式空間做任何您想做的事情。包括通過正則表達式刪除行。在範例中,該命令從模式空間中刪除由破折號形成的行,從而產生您正在尋找的輸出:

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

高溫高壓

引用自:https://serverfault.com/questions/315145