java grep_grep的用法

查看日志:

cat  日志文件  | grep -A/B/C 行数   ‘搜索的内容/关键字’

cat jetty_stdout.log  | grep -A 1000 '15017472573983'

cat jetty_stdout.log  | grep -C 1000 '15017472573983'

2e74424c89b2b0ab1b642a86c8567c57.png

grep命令的格式:

grep   [options]   PATTERN  [FILE]

其中:

1,pattern是用正则表达式书写的模式。

2,FILE是要查找的文件,可以是用空格间隔的多个文件,省略FILE时表示在标准输入中查找

常用参数:

-E :采用规则表示式去解释样式。

-c:只显示匹配行的次数。

-i:搜索时不区分大小写。

-n:输出匹配行的行号。

-v:输出不匹配的行(反向选择)。

-?:同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。

-c,--count:只打印匹配的行数,不显示匹配的内容。

-f File,--file=File:从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。

-i,--ignore-case:忽略大小写差别。

-q,--quiet:取消显示,只返回退出状态。0则表示找到了匹配的行。

-l,--files-with-matches:打印匹配模板的文件清单。

-L,--files-without-match:打印不匹配模板的文件清单。

-n,--line-number:在匹配的行前面打印行号。

-s,--silent:不显示关于不存在或者无法读取文件的错误信息。

-v,--revert-match:反检索,只显示不匹配的行。

-w,--word-regexp:如果被\引用,就把表达式做为一个单词搜索。

-V,--version:显示软件版本信息。

-b,--byte-offset:打印匹配行前面打印该行所在的块号码。

-h,--no-filename:当搜索多个文件时,不显示匹配文件名前缀。

-A NUM:同时输出匹配行的后NUM行。

-B NUM:同时输出匹配行的前NUM行。

-C NUM:同时输出匹配行的前,后各NUM行。

说明:

A:FILE可是使用shell的通配符的多个文件中查找PATTERN。

B:通常必须用单引号将整个模式PATTERN括起来。

C:grep命令不会对输入文件进行任何修改或影响,可以使用输出重定向将结果存文文件。

grep使用举例:

#在文件myfile中查找包含指定的字符串的行

#如果使用grep命令查找指定的字符串(不使用正则表达式),PATTERN可以不用单引号括起来

# grep osmond myfile

#在文件myfile1,myfile2,myfile3中查找指定的字符串的行

# grep 'osmond' myfile1 myfile2 myfile3

#在当前目录的所有文件中查找包含指定的字符串的行

# grep 'osmond' *

#在当前的目录的所有文件中查找包含字符*的行

# grep '*' *

#在文件myfile中查找包含字符$的行

#为了强制shell将\$(单反斜杠和美元符号)传递给grep命令,必须要使用\\(双反斜杠)

#\(单反斜杠)字符课通知grep命令将其后的(本例中的$)视最为原义字符而不是#元字符。

#如果使用fgrep命令,则可以不必使用反斜杠之类的转义符

# grep \\$  myfile

# grep '\$' myfile

# fgrep '$' myfile

# fgrep  $  myfile

#匹配myfile中所有的空行

# grep '^$' myfile

#显示myfile中第一个字符为字母的所有行

# grep '^[a-zA-Z]' myfile

#在文件myfile中查找首字母不是#的行(即过滤掉注释行)

# grep -v  '^#' myfile

#显示在myfile中至少有5个连续的小写字符的字符串的行

# grep '[a-z]\{5\}' myfile

#在文件myfile中查找包含日期格式(yyyy-mm-dd)的行

# grep '[12][0-9]\{3\}-[01][0-9]-[0-3][0-9]' myfile

#在文件myfile中查找与abc或xyz字符串匹配的所有行

# egrep 'abc|xyz' myfile

#如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*)

#这些字符后面紧跟着另外一个es(\1),找到就显示该行

# grep 'w\(es)t.*\1' myfile

# egrep 'w(es)t.*\1' myfile

#通过管道过滤ls输出的内容,值显示以1开头的行

# ls -l | grep '^1'

#通过管道过滤ls输出的行,只显示可写的文件或目录的行

# ls -l | grep '[-d].w..w..w.'

#通过管道过滤ls输出的结果,只显示以~或-或.bak结尾的行

# ls | egrep '(~|-|.bak)$'

#显示awk目录下面所有.txt文件中的总字符字节

# grep '^.' *.txt | wc -c //不包括空行

#显示awk目录下面所有.txt文件中的总字符字节

# grep '^' *.txt | wc -c //包括空行

#显示awk目录下面所有.txt文件中的奇数行的总字符字节

#grep '^' *.txt | awk 'NR % 2 == 1'|wc -c

#显示awk目录下面所有.txt文件中的偶数行的总字符字节

#grep '^' *.txt | awk 'NR % 2 == 0'|wc -c

#把a.txt  b.txt中的奇数行写到文件c.txt文件中

#grep '^' a.txt b.txt |awk 'NR % 2 == 1' > c.txt

#把目录下面.txt中的奇数行写到文件tt.txt文件中

#grep '^' *.txt |awk 'NR % 2 == 1'>tt.txt

$ ls -l | grep '^a'通过管道过滤ls -l输出的内容,只显示以a开头的行。$ grep 'test' d*显示所有以d开头的文件中包含test的行。$ grep 'test' aa bb cc显示在aa,bb,cc文件中匹配test的行。$ grep '[a-z]\{5\}' aa显示所有包含每个字符串至少有5个连续小写字符的字符串的行。$ grep 'west.*\1' aa如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。

下面的例子中我们假定在文件phone.txt中包含以下的文本,——其格式是姓加一个逗号,然后是名,然后是一个制表符,然后是电话号码:

Francis, John           5-3871

Wong, Fred              4-4123

Jones, Thomas           1-4122

Salazar, Richard        5-2522

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值