欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

grep 用法介绍

发布时间:2025/3/20 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 grep 用法介绍 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
grep 可以立即为筛选, 一般的用法系 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: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=@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 IN

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

总结

以上是生活随笔为你收集整理的grep 用法介绍的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。