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 下