1. 程式人生 > >shell查詢某字串在某檔案中出現行數

shell查詢某字串在某檔案中出現行數

一、簡介 有的時候,我們需要分析日誌來排查錯誤,但是日誌檔案特別大,開啟肯定是很慢的,也是沒法接受的,我們需要的是快速定位錯誤出現的位置,並定向取出錯誤資訊。

快速定位某個字串在某檔案中出現的行數,可以使用 linux中grep命令

預設情況,grep命令只會輸出匹配的字串所在的行,如下:    要想同時輸出行號,可以指定引數-n,關於-n引數描述如下:

-n, --line-number   print line number with output lines   現在,我們已經確定要查詢的錯誤所在行數,就可以通過 tail和head或是sed命令輸出特定的行

1、利用tail和head來輸出特定的行 通過tail –help ,我們可以看到tail 預設顯示最後10行,通過 -n引數可以指定從第n行數開始顯示,或是顯示最後n行,如下:

-n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth 也就是說:

tail -n 5 f.txt //顯示f.txt最後5行 tail -n +5 f.txt //從第5行開始,顯示f.txt 通過head –help ,我們可以看到head預設顯示最前10行,通過 -n引數可以指定從倒數第n行開始,顯示前面的所有,或是顯示最前面的n行

 -n, --lines=[-]K   print the first K lines instead of the first 10; with the leading `-', print all but the last 也就是說:

head -n 5 f.txt //顯示f.txt最前面5行 tail -n -5 f.txt //從倒數第5行開始,顯示前面的所有內容 比如,在上面我們定位到了8786830行,那麼,我們就可以利用tail和head,查其附近的內容(即錯誤前20行,後10行內容),如下:

tail -n +8786810 err.log |head -n 30 2、利用sed來輸出特定的行 通過sed來檢視指定的行,就比較簡單,格式如下:

sed -n "n1,n2p" f.txt //檢視f.txt n1行到n2行之間的內容 比如,在上面我們定位到了8786830行,那麼,我們就可以利用sed,查其附近的內容(即錯誤前20行,後10行內容),如下:

sed -n "8786810,8786840p" err.log