Bash

在單獨的行上過濾日誌輸出

  • May 1, 2015

我在目錄中執行了遞歸 grep 以查找所有匹配的文件,如下所示

grep -ER "match_string1|match_string2" /path/to/dir/

我得到的輸出是:

/path/to/dir/timestamp.log:match_string1
/path/to/dir/timestamp.log:match_string2
/path/to/dir/timestamp.log:match_string2

其中match_string1代表一個模型#其中match_string2代表一個測試結果

我想合併這些行,以便我可以說出模型# 和測試結果何時匹配特定標準然後計數

注意:雙 match_string2 與 match_string1 在同一行是可以的

我期望的範例輸出:

/path/to/dir/timestamp.log:match_string1; /path/to/dir/timestamp.log:match_string2; /path/to/dir/timestamp.log:match_string2

感謝幫助

sed '/match_string1/{
    :1
    N
    /\n.*match_string2/s/\n/; /
    t1
    P
    D
                    }'

當腳本與match_string1它相遇時,將下一行添加到模式中並檢查該添加的行中是否存在match_string2if 所以它們替換newline 符號;並添加下一行進行檢查。如果沒有match_string2(所以沒有進行替換),腳本列印第一行並從第二行開始處理。

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