⑴ 幾種在shell命令行中過濾adb logcat輸出的方法
1. 只顯示需要的輸出,白名單
最方便的當然是通過管道使用 grep 過濾了,這樣可以使用 grep 強大的正則表達式匹配。簡單的匹配一行當中的某個字元串,例如 MyApp:
adb logcat | grep MyApp
adb logcat | grep -i myapp #忽略大小寫。
adb logcat | grep --color=auto -i myapp #設置匹配字元串顏色。更多設置請查看 grep 幫助。
進階一點可以使用 grep 的正則表達式匹配。例如上一個例子會匹配一行中任意位置的 MyApp,可以設置為僅匹配 tag。默認的 log 輸出如下,如果修改過輸出格式相應的表達式也要修改。
I/CacheService( 665): Preparing DiskCache for all thumbnails.
可以看出 tag 是一行開頭的第三個字元開始,根據這點寫出表達式:
adb logcat | grep "^..MyApp"
根據這個格式也可以設置只顯示某個優先順序的 log,再匹配行首第一個字元即可。例如僅顯示 Error 級別 tag 為 MyApp 的輸出:
adb logcat | grep "^E.MyApp"
當然也可以匹配多個,使用 | 分割多個匹配表達式,要加轉義符。例如要匹配 tag 為 MyApp 和 MyActivity 的輸出:
adb logcat | grep "^..MyApp\|^..MyActivity"
adb logcat | grep -E "^..MyApp|^..MyActivity" #使用 egrep 無須轉義符
2. 過濾不需要的輸出,黑名單
還是使用 grep,用法也跟上面的一樣,加一個 -v 即可。例如要過濾 tag 為 MyApp 和 MyActivity 的輸出:
adb logcat | grep -v "^..MyApp\|^..MyActivity"
adb logcat | grep -vE "^..MyApp|^..MyActivity" #使用 egrep 無須轉義符
3. 顯示同一個進程的所有輸出
有時一個程序裡面的 tag 有多個,需要輸出該程序(同一個 PID)的所有 tag;僅使用 tag 過濾有時也會漏掉一些錯誤信息,而一般錯誤信息也是和程序同一個 PID。還是通過 grep 實現,思路是先根據包名找到 pid 號,然後匹配 pid。寫成 shell 腳本如下,參數是程序的 java 包名(如 com.android.media)。
查看源代碼列印幫助
1 #!/bin/bash
2 packageName=$1
3 pid=`adb shell ps | grep $packageName | awk '{print $2}'`
4 adb logcat | grep --color=auto $pid
4. 從當前開始顯示
logcat 有緩存,如果僅需要查看當前開始的 log,需要清空之前的。
adb logcat -c && adb logcat
5. 過濾 log 文件
有時需要分析 log 文件,過濾 log 文件還是使用 grep。例如 log 文件為 myapp.log,要匹配 tag 為 MyApp 和 MyActivity 的輸出,然後輸出到 newmyapp.log:
cat myapp.log | grep "^..MyApp\|^..MyActivity" > newmyapp.log
Windows 下推薦使用 Notepad++,一個免費強大的記事本,支持正則表達式查找替換。可以高亮顯示匹配內容,也可以刪除不需要的內容。
以上的技巧主要用到了 grep,其實 logcat 本身也有過濾功能,可以根據 tag、優先順序過濾 log,具體請參考 Android 官方文檔 Reading and Writing Logs。如果喜歡使用圖形界面,請參考 Using DDMS,DDMS 裡面的 logcat 也可以同樣過濾。
⑵ shell grep 匹配行首為空格的問題
grep -E '^CFLAGS' 文件名
PS:你標題說行首是空格,下面的不是啊?你的意思只是匹配例子中第一行,不匹配第二行?上面這樣就對了。
⑶ 如何使用grep篩選出含有A或者B字元的行
me@ubuntu:grep$cattest.txt
aa123
AA123
AABB123
BB123
me@ubuntu:grep$grep-e'AA'-e'BB'./test.txt
AA123
AABB123
BB123
⑷ 在linux系統如何grep過濾中,不包含某些字元
1、linux系統中grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行列印出來。grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用許可權是所有用戶。
2、格式
grep[options]
3、主要參數
[options]主要參數:
-c:只輸出匹配行的計數。
-I:不區分大小寫(只適用於單字元)。
-h:查詢多文件時不顯示文件名。
-l:查詢多文件時只輸出包含匹配字元的文件名。
-n:顯示匹配行及行號。
-s:不顯示不存在或無匹配文本的錯誤信息。
-v:顯示不包含匹配文本的所有行。
pattern正則表達式主要參數:
\:忽略正則表達式中特殊字元的原有含義。
^:匹配正則表達式的開始行。
$: 匹配正則表達式的結束行。
\<:從匹配正則表達式的行開始。
\>:到匹配正則表達式的行結束。
[ ]:單個字元,如[A]即A符合要求。
[ - ]:范圍,如[A-Z],即A、B、C一直到Z都符合要求。
。:所有的單個字元。
* :有字元,長度可以為0。
4、grep命令使用簡單實例:
$ grep 『test』d*
顯示所有以d開頭的文件中包含test的行。
$ grep 『test』aa bb cc
顯示在aa,bb,cc文件中匹配test的行。
$ grep『[a-z]\{5\}』 aa
顯示所有包含每個字元串至少有5個連續小寫字元的字元串的行。
⑸ linux下怎麼用grep指令找有字元串結尾的行
1、首先來在打開的linux終端源下,可以使用grep --help查看,如下圖所示。
⑹ shell 如何在grep後只取一部分
這個好說,可以繼續加管道符,然後用cut 命令截取對應的欄位,cut命令可以按回位置截取,也可以按分隔符截答取第幾個欄位。
例如cut -f ' ' 3
表示以空格為分隔符,取第三個欄位
⑺ shell grep 的結果只取第一行
可以使用head -1 命令來只取grep到的數據的第一行。
例如一個文本文檔a.txt內容是:
北京是我們的首都
北京天安門坐落在中華人民共和國首都北京市的中心
我在北京天安門廣場吃炸雞
使用命令 cat a.txt |grep 北京 | head -n 1 可以只取到第一行的數據北京。
(7)shellgrep過濾的是行擴展閱讀
Linux中head命令詳解:
head命令與tail命令用法相似,head命令用於查看文檔的開始指定數量的字元塊,默認顯示文檔的前 10 行,如果給定的文件不止一個,則在顯示的每個文件前面加一個文件名標題。
1、grep命令用法格式
head 【參數】【文件】
2、命令選項
-c, --bytes=[-]K k,顯示文檔開始的前k個位元組,-k,不顯示文檔結尾的最後 k 個位元組
-n, --lines=[-]K k,顯示文檔開始的前k行,-k,不顯示文檔結尾的最後 k 行
-q, --quiet, --silent 不顯示包含給定文件名的文件頭
-v, --verbose 總是顯示包含給定文件名的文件頭
--help 顯示此幫助信息並退出
--version 顯示版本信息並退出
3、實例
#顯示前5行
head -n 5 head.txt
#顯示前5個位元組
head -c 5 head.txt
⑻ linux中怎麼用grep提取同時滿足兩個條件的行
需要准備的材料抄分別是:電腦襲、linux連接工具。
1、首先連接上linux主機,進入命令行狀態。
⑼ shell grep -v grep|grep -v tail 是啥意思
grep -v grep | grep -v tail
1、第一部分 「grep -v grep" 在文檔中過濾掉包含有grep字元的行
2、第二專部分「grep -v tail」 在第一部分過屬濾掉之後再過濾掉剩餘文檔中包含有tail字元的行
3、總結一下就是:這條命令的意思就是過濾掉文檔中包含字元「grep」和「tail」的行
4、可簡化為:grep -v "cp|mkdir"