grep 用法介绍
1.?grep + 要查詢的字段 + 文件
gateman@GPC:~/shell/SQL_GSI$ grep OID a.sql?
WHERE OID=@BuildNOWHERE OID INWHERE OID=@BuildNOWHERE OID IN上面的意思就系 ?篩選文件a.sql ? 將含有OID的行 列出來.gateman@GPC:~/shell/SQL_GSI$ grep ^WHERE a.sql?
WHERE BuildNO=@BuildNO AND Year=@Year AND Money=@Money AND Level=@LevelWHERE OID=@BuildNOWHERE SHIP INWHERE OID INWHERE DeptPersonStatus=@BuildNO AND Year=@Year AND Work_Time=@WorkTime AND Level=@LevelWHERE OID=@BuildNOWHERE SHIP INWHERE OID INWHERE Year=@Year AND Level=@LevelWHERE Level=@Level上面意思就系 grep 出 a.sql 中以 WHERE開始的行(不包括以空格開始)2. ?-A NUM,--after-context=NUM ? (除了列出符合行之外,并且列出後NUM行)gateman@GPC:~/shell/SQL_GSI$ grep -A 2 ^WHERE a.sql?WHERE BuildNO=@BuildNO AND Year=@Year AND Money=@Money AND Level=@Level
/*建造規劃版本表最新修改時間*/
SELECT @Max_BVer=MAX(UpdateTime)
--
WHERE OID=@BuildNO
/*號船進度預測的最新修改時間*/
SELECT @Max_SProgress=MAX(UpdateTime)
--
WHERE SHIP IN
(SELECT SHIP
FROM BuildSchedule
WHERE BuildNo=@BuildNO
--
.........(仲有)上面意思就系?rep 出 a.sql 中以 WHERE開始的行 并且連同下面3行都顯示出來囧
3. ?-B?NUM, ?--before--context=NUM ? (除了列出符合行之外,并且列出前面NUM行,與 - A NUM參數相對)
4.??-C [NUM], ? -NUM --context[=NUM] (除了列出符合行之外,平且列出上面各NUM行,NUM預設值系2)
5. ?-b, --byte-offset ?(除了列出符合行之外,平且列出文本再這行之前所占的字節數)gateman@GPC:~/shell/SQL_GSI$ grep -b OID a.sql?587:WHERE OID=@BuildNO915:WHERE OID IN2152:WHERE OID=@BuildNO2496:WHERE OID IN上面意思就系在WHERE OID=@BuildNO 之前, a.sql的文本占有587bit 。。。
6.-c, --count (不出符合條件所有行,而是列除符合條件的行數) 若再加上-v,--invert-match,參數顯示不符合的總行數。
gateman@GPC:~/shell/SQL_GSI$ grep -c OID a.sql?
4gateman@GPC:~/shell/SQL_GSI$ grep -c -v OID a.sql?155gateman@GPC:~/shell/SQL_GSI$ grep -c "OID" CreateFunction.sql a.sqlCreateFunction.sql:4a.sql:47.--ignore-case (忽略大小寫)
?gateman@GPC:~/shell/SQL_GSI$ grep -i -A 1 sale a.sql
/****** 對象: 用戶定義的函數 dbo.CheckShipSales 腳本日期: 2010-7-23 10:47:27 ******/ CREATE FUNCTION dbo.CheckShipSales (@BuildNO INT,@Year INT,@Money INT,@Level INT) -- DECLARE @Min_SSales AS DATETIME DECLARE @Max_BVer AS DATETIME -- /*ShipSales最早修改時間*/ SELECT @Min_SSales=MIN(UpdateTime) FROM ShipSales WHERE BuildNO=@BuildNO AND Year=@Year AND Money=@Money AND Level=@Level -- IF @Min_SSales>=@Max_BVer AND @Min_SSales>=@Max_SProgress AND @Min_SSales>=@Max_Ship BEGIN -- DECLARE @Min_SSales AS DATETIME DECLARE @Max_BVer AS DATETIME -- SELECT @Min_SSales=MIN(UpdateTime) FROM DeptPersonStatus --?
8. -n, --line-number (標出行號)9. -r, --recursive (后面參數跟文件夾,遞地,讀取每個資料夾下的所有檔案,此相當於 -d recsuse 參數)
注:在sunos(Solaris)系統中,那個版本的grep無 -r 參數,可以用下面如果代替find . ?-type f -exec grep -l ?"USP_C_GTI_DATAPRE_ISSU" {} \; (不顯示內容,只顯示文件名)find . ?-type f -exec grep -n ?"USP_C_GTI_DATAPRE_ISSU" {} \; (顯示符合條件的內容)
gateman@GPC:~/shell$ grep -n -r OID ./SQL_GSI/
./SQL_GSI/CreateProcedure.txt:45: S.ODock=D.OID AND S.OShip=BS.OID AND
./SQL_GSI/CreateFunction.sql:20:WHERE OID=@BuildNO
./SQL_GSI/CreateFunction.sql:34:WHERE OID IN
./SQL_GSI/CreateFunction.sql:87:WHERE OID=@BuildNO
./SQL_GSI/CreateFunction.sql:101:WHERE OID IN
./SQL_GSI/a.sql:20:WHERE OID=@BuildNO
./SQL_GSI/a.sql:34:WHERE OID IN
./SQL_GSI/a.sql:87:WHERE OID=@BuildNO
./SQL_GSI/a.sql:101:WHERE OID IN
./SQL_GSI/folder01/b.sql:20:WHERE OID=@BuildNO
./SQL_GSI/folder01/b.sql:34:WHERE OID IN
./SQL_GSI/folder01/b.sql:87:WHERE OID=@BuildNO
./SQL_GSI/folder01/b.sql:101:WHERE OID IN
。。。。。。。。。。。。。。。。
11.?-H, --with-filename (在每個符合樣式行前加上符合的檔案名稱,若有路徑會顯示路徑)12. ? ? -h, --no-filename ??與-H參數相類似,但在輸出時不顯示路徑。gateman@GPC:~/shell/SQL_GSI$ grep -H OID a.sql folder01/b.sql?a.sql:WHERE OID=@BuildNOa.sql:WHERE OID INa.sql:WHERE OID=@BuildNOa.sql:WHERE OID INfolder01/b.sql:WHERE OID=@BuildNOfolder01/b.sql:WHERE OID INfolder01/b.sql:WHERE OID=@BuildNOfolder01/b.sql:WHERE OID INgateman@GPC:~/shell/SQL_GSI$ grep -h OID a.sql folder01/b.sql?WHERE OID=@BuildNOWHERE OID INWHERE OID=@BuildNOWHERE OID INWHERE OID=@BuildNOWHERE OID INWHERE OID=@BuildNOWHERE OID IN13. -l, --files-with-matches (不顯示平常一般的輸出結果,只顯示符合的檔案名稱) ?相當有用啊gateman@GPC:~/shell$ grep -l -r OID SQL_GSI/SQL_GSI/CreateProcedure.txtSQL_GSI/CreateFunction.sqlSQL_GSI/c.sqlSQL_GSI/a.sqlSQL_GSI/folder01/b.sqlSQL_GSI/CreateProcedure2.txtSQL_GSI/CreateProcedure3.txt14. ?-L, --files-without-match ? (不顯示平常一般的輸出結果,反而顯示出沒有符合的檔案名稱) 對應 -l
15 ?-f FILE, --file=FILE?事先將要搜尋的樣式(篩選的條件)寫入到一個文件,一行一個樣式。?然後采用文件搜尋。?空的文件表示沒有要搜尋的樣式,因此也就不會有任何符合。?
grep -n -f abc.txt a.sql?例如 abc.txt 入面有兩行OID Sale 就如下gateman@GPC:~/shell/SQL_GSI$ cat > abc.txtOIDgateman@GPC:~/shell/SQL_GSI$ cat >> abc.txt?Salegateman@GPC:~/shell/SQL_GSI$ cat abc.txt?OIDSalegateman@GPC:~/shell/SQL_GSI$ grep -n -f abc.txt a.sql?1:/****** 對象: ?用戶定義的函數 dbo.CheckShipSales ? 腳本日期: 2010-7-23 10:47:27 ******/2:CREATE FUNCTION ?dbo.CheckShipSales7:DECLARE @Min_SSales AS DATETIME12:/*ShipSales最早修改時間*/13:SELECT @Min_SSales=MIN(UpdateTime)14:FROM ShipSales20:WHERE OID=@BuildNO34:WHERE OID IN40:IF @Min_SSales>=@Max_BVer AND?41: ? @Min_SSales>=@Max_SProgress AND?42: ? @Min_SSales>=@Max_Ship?67:DECLARE @Min_SSales AS DATETIME80:SELECT @Min_SSales=MIN(UpdateTime)87:WHERE OID=@BuildNO101:WHERE OID IN137:IF @Min_SSales>=@Max_BVer AND?138: ? @Min_SSales>=@Max_SProgress AND?139: ? @Min_SSales>=@Max_Ship AND140: ? @Min_SSales>=@Max_MonthMH AND141: ? @Min_SSales>=@Max_StandardWorkTime AND142: ? @Min_SSales>=@Max_Calendar AND143: ? @Min_SSales>=@Max_RainyDays AND144: ? @Min_SSales>=@Max_DepartmentOfWP AND145: ? @Min_SSales>=@Max_DeptJobType AND146: ? @Min_SSales>=@Max_DeptJobTypeOut
總結
- 上一篇: 安装和配置sendmail
- 下一篇: 学习笔记:文本过滤_____unix 下