grep 用法介绍

来源:互联网 发布:python获取交集 编辑:程序博客网 时间:2024/04/30 08:38
grep 可以立即为筛选, 一般的用法系 grep + 要查询的字段 + 文件(或者内容 例如| 传递既内容)

1. grep + 要查询的字段 + 文件

gateman@GPC:~/shell/SQL_GSI$ grep OID a.sql 

WHERE OID=@BuildNO
WHERE OID IN
WHERE OID=@BuildNO
WHERE 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=@Level
WHERE OID=@BuildNO
WHERE SHIP IN
WHERE OID IN
WHERE DeptPersonStatus=@BuildNO AND Year=@Year AND Work_Time=@WorkTime AND Level=@Level
WHERE OID=@BuildNO
WHERE SHIP IN
WHERE OID IN
WHERE Year=@Year AND Level=@Level
WHERE 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=@BuildNO
915:WHERE OID IN
2152:WHERE OID=@BuildNO
2496: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 

4
gateman@GPC:~/shell/SQL_GSI$ grep -c -v OID a.sql 
155
gateman@GPC:~/shell/SQL_GSI$ grep -c "OID" CreateFunction.sql a.sql
CreateFunction.sql:4
a.sql:4

7.--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
。。。。。。。。。。。。。。。。

10. -v, --invert-match ( 显示除搜寻样式行之外的全部

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=@BuildNO
a.sql:WHERE OID IN
a.sql:WHERE OID=@BuildNO
a.sql:WHERE OID IN
folder01/b.sql:WHERE OID=@BuildNO
folder01/b.sql:WHERE OID IN
folder01/b.sql:WHERE OID=@BuildNO
folder01/b.sql:WHERE OID IN
gateman@GPC:~/shell/SQL_GSI$ grep -h OID a.sql folder01/b.sql 
WHERE OID=@BuildNO
WHERE OID IN
WHERE OID=@BuildNO
WHERE OID IN
WHERE OID=@BuildNO
WHERE OID IN
WHERE OID=@BuildNO
WHERE OID IN

13. -l, --files-with-matches (不显示平常一般的输出结果,只显示符合的档案名称)  相当有用啊

gateman@GPC:~/shell$ grep -l -r OID SQL_GSI/
SQL_GSI/CreateProcedure.txt
SQL_GSI/CreateFunction.sql
SQL_GSI/c.sql
SQL_GSI/a.sql
SQL_GSI/folder01/b.sql
SQL_GSI/CreateProcedure2.txt
SQL_GSI/CreateProcedure3.txt

14.  -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.txt
OID
gateman@GPC:~/shell/SQL_GSI$ cat >> abc.txt 
Sale
gateman@GPC:~/shell/SQL_GSI$ cat abc.txt 
OID
Sale
gateman@GPC:~/shell/SQL_GSI$ grep -n -f abc.txt a.sql 
1:/****** 对象:  用户定义的函数 dbo.CheckShipSales   脚本日期: 2010-7-23 10:47:27 ******/
2:CREATE FUNCTION  dbo.CheckShipSales
7:DECLARE @Min_SSales AS DATETIME
12:/*ShipSales最早修改时间*/
13:SELECT @Min_SSales=MIN(UpdateTime)
14:FROM ShipSales
20:WHERE OID=@BuildNO
34:WHERE OID IN
40:IF @Min_SSales>=@Max_BVer AND 
41:   @Min_SSales>=@Max_SProgress AND 
42:   @Min_SSales>=@Max_Ship 
67:DECLARE @Min_SSales AS DATETIME
80:SELECT @Min_SSales=MIN(UpdateTime)
87:WHERE OID=@BuildNO
101:WHERE OID IN
137:IF @Min_SSales>=@Max_BVer AND 
138:   @Min_SSales>=@Max_SProgress AND 
139:   @Min_SSales>=@Max_Ship AND
140:   @Min_SSales>=@Max_MonthMH AND
141:   @Min_SSales>=@Max_StandardWorkTime AND
142:   @Min_SSales>=@Max_Calendar AND
143:   @Min_SSales>=@Max_RainyDays AND
144:   @Min_SSales>=@Max_DepartmentOfWP AND
145:   @Min_SSales>=@Max_DeptJobType AND
146:   @Min_SSales>=@Max_DeptJobTypeOut

原创粉丝点击