Echo

僅在找到模式後列印輸出

  • March 29, 2019

有一個腳本(我們稱之為echoer)列印以篩選一堆資訊。我希望在找到模式後才能看到線條。

我想像一個解決方案的使用看起來像

echoer | solution_command <pattern>

理想情況下pattern將是一個正則表達式,但硬值字元串對我來說就足夠了。

AWK 可以使用模式範圍來做到這一點,它允許使用任何正則表達式:

echoer | awk '/pattern/,0'

將從第一行匹配開始列印echoer的輸出pattern

AWK 是基於模式的,通常與“如果此模式匹配,則執行此操作”類型的方法一起使用。“這個模式”可以是一系列模式,定義為“當這個模式匹配時,開始這樣做,直到另一個模式匹配”;這是通過寫兩個用逗號分隔的模式來指定的,如上所述。模式可以是文本匹配,如在 中/pattern/,根據模式檢查目前行,解釋為正則表達式;它們也可以是通用表達式,對每一行進行評估,如果它們的結果非零或非空,則認為匹配。

在 AWK 中,預設操作是列印目前行。

將所有這些放在一起,awk '/pattern/,0'查找匹配的行pattern,一旦找到,將預設操作應用於所有行,直到0條件匹配(非零)。awk '/pattern/,""'也可以。

Gawk手冊更詳細。

引用自:https://unix.stackexchange.com/questions/509173