grep是UNIX和LINUX中使用最廣泛的命令之一。grep允許對文本文件進行模式查找。如果找到匹配模式, grep列印包含模式的所有行。grep支持基本正則表達式,也支持其擴展集。grep有三種變形,即: grep:標準grep命令,這裡主要討論此格式; Egrep:等同於grep -E,擴展g ...
grep是UNIX和LINUX中使用最廣泛的命令之一。grep允許對文本文件進行模式查找。如果找到匹配模式, grep列印包含模式的所有行。grep支持基本正則表達式,也支持其擴展集。grep有三種變形,即:
grep:標準grep命令,這裡主要討論此格式;
Egrep:等同於grep -E,擴展grep,支持基本及擴展的正則表達式;
Fgrep:等同於grep -F,不支持正則表達式,允許查找字元串而不是一個模式。
grep有很多選項可供使用,有問題找“男人”,會有詳細說明,我這裡只是說說我所使用到的,最近需要寫一些shell腳本,在這過程中有用到grep命令。下麵就是幾種使用場景:
1. 查找A目錄下所有文件中特定內容是否在B目錄下對應文件中存在
解決辦法:藉助grep把A目錄下每個文件里特定內容輸出到另外一個文件中,B目錄同樣處理,使用命令:
grep "define" fileA > listA
grep "define" fileA > listB
因為define後面的部分內容不一樣,我們的目的是找出類似define("TEST_A","testa");格式而文件沒有TEST_A的部分,當然裡面有很多不同的define語句。如果使用diff命令來對比的話難以應付,所以可以使用windows下的BeyondCompare工具進行人工比對,不同的內容會標紅一目瞭然,那麼至少在逗號前面相同部分是不會標紅的,關於這個工具還有更多的用處,感興趣的可以搜索一下。
2. 要對某目錄下除了個別文件外的所有內容打包壓縮
解決辦法:使用grep -v註意是小寫的v,意為不包含匹配的行,而大寫的V意為版本。
完整命令可以寫為:
ls PATH | grep -v '.log' | grep -v '.tar.gz' > tar.list
目的把需要打包的文件及目錄名(排除.log及.tar.gz尾碼名文件)寫入tar.list
第二步即進行打包操作:
cat tar.list | xargs tar -zcvf target.tar.gz
把cat出的結果作為參數傳入管道後面執行打包命令,這也是xargs的用法.
http://hovertree.com/menu/linux/
3. 找出目錄下最新的滿足"target_數字"格式的目錄
解決辦法: 使用grep -e當然使用-E也可以。
完整命令為:
ls PATH --sort=time | grep -e resource_\d* | head -1
使用ls的選項--sort=time時間排序排列,而head即是獲取命中的第一部分。
推薦:http://www.cnblogs.com/roucheng/p/3470287.html