Linux
搜尋 Linux 文件並過濾掉特定字元串並刪除其他所有內容
我試圖找到一種有效的方法來搜尋目錄中的一整套文件,並且只查找直到第一個逗號的特定字元串。
postgres 日誌文件的範例:
Apr 27 03:35:18 test postgres[24098]: [5-1] user=postgres,db=postgres,app=psqlclient=127.0.0.1 Apr 27 03:35:18 test postgres[24098]: [5-2] user=postgres,db=postgres,app=psqlclient=127.0.0.1
我只對文件中使用的使用者名感興趣。我可以使用 pgbadger 並通過 HTML 查看它,但會非常耗時。
舉個例子,我只能看到:
user=postgres
與使用者前後的整套文本相反。
但是,我正在尋找任何不是專門為 postgres 的使用者。
我曾嘗試在文件上使用 grep,但我只在 user=postgres 上看到結果。
是否有通過一組文件搜尋說 user= 直到第一個逗號作為範例?
甚至搜尋每個文件並刪除每行中 user= 之前的任何內容,然後我可以將其放入 excel 中以獲得我需要的結果。
任何幫助深表感謝。
使用
awk
:awk '/user=/{gsub(/^.*user=|,.*$/, "");print $0}' file
如果你想顯示
user=
和文件名,那麼命令可能會改變。awk '/user=/{gsub(/^.*user=|,.*$/, ""); printf "%s:user=%s\n",FILENAME,$0}' *.log
在此命令中,如果
user=
找到,則gsub()
函式將字元從記錄開始到記錄結束,user=
並在逗號之後user
到記錄結束將它們更改為空字元串(""
)。
GNU grep
與 一起使用PCRE
:grep -Po -- '(?<=user=).+?(?=,)' *.log
如果您也想顯示
user=
關鍵字:grep -o -- 'user=[^,]*' *.log
您甚至可以通過在上面
-H
的命令中添加選項來顯示匹配成功grep
的文件(沒有它,只有在指定多個文件時才會顯示文件名)。所以
grep
命令變成:grep -Ho -- 'user=[^,]*' *.log
和輸出:
pgsql.log:user=postgres pgsql.log:user=postgres