如何使用 grep 確定多行中存在的模式?下面是我需要檢查的多行模式是否存在于檔案中
Status: True Type: Master
我嘗試了以下命令,但它在一行上檢查多個字串,但在多行上的字串模式匹配失敗
if cat file.txt | grep -P '^(?=.*Status:.*True)(?=.*Type:.*Master)'; then echo "Present"; else echo "NOT FOUND"; fi
檔案.txt
Interface: vlan Status: True Type: Master ID: 104
uj5u.com熱心網友回復:
使用gnu-grep你可以這樣做:
grep -zoP '(?m)^\s*Status:\s True\s Type:\s Master\s*' file
Status: True
Type: Master
解釋:
P: 啟用 PCRE 正則運算式模式-z: 讀取多行輸入-o: 只列印匹配的資料(?m)啟用 MULTILINE 模式,以便我們可以^在每一行之前使用^: 開始一行
uj5u.com熱心網友回復:
使用您顯示的示例,請嘗試以下awk程式。用 GNU 撰寫和測驗awk。
awk -v RS='(^|\n)Status:[[:space:]] True\nType:[[:space:]] Master' '
RT{
sub(/^\n/,"",RT)
print RT
}
' Input_file
說明:簡單的解釋是將RS(記錄分隔符awk)設定為正則運算式(^|\n)Status:[[:space:]] True\nType:[[:space:]] Master(如下所述),并在主程式中檢查是否RT為 NOT NULL,然后洗掉帶有 NULL 的新行(開始一行)RT并列印值RT以獲得 OP 顯示的預期輸出。
uj5u.com熱心網友回復:
我這樣做如下:
grep -A 1 "^.*Status:.*True" test.txt | grep -B 1 "^Type:.*Master"
-A x裝置“還顯示找到的行之后的行A。x裝置”還顯示找到
的行之前的行B。-B yy
因此:將“狀態”行與下一行(“型別”行)一起顯示,然后將“型別”行與前一行(“狀態”行)一起顯示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/476798.html
