我想在許多反映不同服務器的歸檔日志檔案夾中搜索某個字串。到目前為止,我使用了 2 個不同的命令
-bash-4.1$ zcat /mnt/bkp/logs/cmmt-54-22[8-9]/my_app.2021-12-28-* | grep 'abc'
和
-bash-4.1$ zcat /mnt/bkp/logs/cmmt-54-23[0-3]/my_app.2021-12-28-* | grep 'abc'
我基本上想搜索服務器檔案夾 cmmt-54-228、cmmt-54-229 .... cmmt-54-233。
我嘗試將這兩個命令合二為一,但在我這邊使用正則運算式似乎并沒有出錯
-bash-4.1$ zcat /mnt/bkp/logs/cmmt-54-22[8-9]|3[0-3]/my_app.2021-12-28-* | grep 'abc'
請幫忙。
uj5u.com熱心網友回復:
正則運算式不是全域的。見man 7 globvs man 7 regex。
grep與正則運算式。grep過濾與某些正則運算式匹配的行。
Shell 擴展您撰寫的單詞。Shell 替換您撰寫的包含“檔案名擴展觸發器”的內容* ? [,并將該單詞替換為匹配檔案名的單詞串列。
您可以使用擴展模式匹配(請參閱 參考資料man bash),這在此處聽起來是最自然的:
shopt -s extglob
echo /mnt/bkp/logs/cmmt-54-2@(2[8-9]|3[0-3])/my_app.2021-12-28-*
在互動式 shell 中,我只需要寫兩次:
zcat /mnt/bkp/logs/cmmt-54-22[8-9]/my_app.2021-12-28-* /mnt/bkp/logs/cmmt-54-23[0-3]/my_app.2021-12-28-*
或使用大括號展開(請參閱man bash):
zcat /mnt/bkp/logs/cmmt-54-2{2[8-9],3[0-3]}/my_app.2021-12-28-*
大括號擴展首先將單詞替換為兩個單詞,然后檔案名擴展將它們替換為實際檔案名。
您也可以find使用-regex. 為此,請參閱man find。(或輸出檔案名串列并將其通過管道傳輸grep,然后使用xargs或類似方法將其傳遞給命令)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410613.html
標籤:
