Linux命令之grep

Linux命令之grep

         grep(global search regular expression and print out the line,全面搜索正则表达式并把行打印)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配到的行打印出来。与之相应的还有egrep和fgrep命令。

         grep的工作方式:在一个或多个文本中搜索字符串模板,如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。

命令格式:

grep [option] pattern file

         一般情况下,grep命令使用时需要指定文件,若不制定任何文件名称,或是所给予的文件名为“-”,则grep命令会从标准输入设备读取数据。

 

grep的常用选项:

-A num或--after-context=num              匹配到搜索到的行以及该行下面的num行

-a或--text                                                   不要忽略二进制的数据

-B num或--before-context=num           匹配到搜索到的行以及该行上面的num行

-b或--byte-offset                                      输出每一个匹配行(或匹配的字符串)时在其前附加上偏移量(从文件第一个字符到该匹配内容之间的字节数),在显示符合样式的那一行之前标示出该行第一个字符的编号

-C num或--context=num或-num         匹配到搜索到的行以及该行上下各num行

-c或--count                                                抑制正常输出,为每个输入文件打印匹配线的计数,计算符合样式的列数

--color [=WHEN]                                       让关键字高亮显示,如—color=auto

-d 动作或--directories=动作                          当指定要查找的是目录而非文件时,必须使用此项参数,否则grep指令将回报信息并停止动作

-E或--extended-regexp                           将样式为延伸的普通表示法来使用

-e 样式或--regexp=样式                        使用“样式”作为模式。这可以用于指定多个搜索模式,或保护以连字符“-”开头的图案,指定字符串作为查找文件内容的样式

-F或--fixed-regexp                                            将样式视为固定字符串的列表

-f 规则文件或--file=规则文件             指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式

-G或-basic-regexp                                    将范本样式视为普通的表示法来使用。这是默认值,加不加都是使用grep

-H或--with-filename                                在每一个匹配行之前加上文件名一起输出(针对于查找单个文件),当查找多个文件时默认就会输出文件名

-h或--no-filename                                    禁止输出文件名的前缀,无论查找几个文件都不会在匹配内容前输出文件名

-i或--ignore-case                                      搜索的时候忽略大小写的差别

-L或--files-without-match                      列出文件内容不符合指定样式的文件名称

-l或--file-with-matches                           列出文件内容符合指定样式的文件名称

-m num                                                        当匹配内容的行数达到num行后,grep自动停止搜索,并输出此时搜索到的匹配内容

--label = LABEL                                                    显示实际来自标准输入的输入作为来自文件LABEL的输入。这是特别在实现zgrep等工具时非常有用,例如gzip –cd foo.gz | grep –label = foo -H

-n或--line-number                                    输出匹配内容的同时输出其所在行号

-o或--only-matching                               只输出匹配的具体字符串,匹配行中其他内容不会输出

-q或--quiet或--silent                              安静模式,不会有任何输出内容,查找到匹配内容会返回0,未查找到匹配内容就返回非0

-r或--recursive                                          此参数的效果和指定"-d recurse"参数相同,递归读取每个目录下的所有文件

-s或--no-messages                                           不会输出查找过程中出现的任何错误消息,-q和-s选项因为与其他系统的grep有兼容问题,shell脚本中应尽量避免使用这两个参数,并且应该将标准和错误输出重定向到/dev/null

-T                                                                  初始标签确保实际行内容的第一个字符位于制表位上,以便对齐标签看起来很正常。在匹配信息和其前的附加信息之间加入Tab以使格式整齐

-V或--version                                            打印grep的版本号

-v或--revert-match                                           反转匹配,选择没有被匹配到的内容

-w或--word-regexp                                  只匹配整个单词,单词的两边必须是非字符符号(即不能是字母、数字、下划线)

-x或--line-regexp                                      仅选择与整行完全匹配的匹配项,即精确匹配整行内容(包括行首行尾那些看不到的空格内容)

-y                                                                   和-i效果相同,即忽略大小写

 

案例:

测试用文件Demo_File.txt

1.从单个文件中国查找指定的字符串

从Demo_File.txt文件中查找“this”字符串

grep “this” Demo_File.txt

2.从多个文件中查找指定的字符串

从Demo_File.txt和Demo_File1.txt中查找“this”字符串

grep “this” Demo_File.txt Demo_File1.txt

或可使用命令   grep “this” Demo_*来完成查找

3.忽略大小写进行查找

在Demo_File.txt文件中使用-i或-y参数查找“the”

4.在文件中匹配正则表达式

在Demo_File.txt文件中匹配所有的以lines开头,empty结尾的数据

grep “lines.*empty” Demo_File.txt

5.用grep –w来查找全匹配

grep –iw “is” Demo_File.txt

6.用grep –A,-B,-C命令来查看文件

以Demo_File2.txt作为测试用文件,文件内容为A~Z,每行一个,共26行

显示匹配行及其后N行

grep -A “J” Demo_File2.txt

显示匹配行及其后N行

grep -B “J” Demo_File2.txt

显示匹配行及其前和其后各N行

grep -C “J” Demo_File2.txt

7.用Grep –options来让查找的项醒目

export GREP_COLOR=’a;b’

默认’a;b’是’1;31’,即高亮的红色,用户还可自己设置醒目的方式

a可以选择0,1,4,5,7,8的值

0       关闭所有属性

1       设置高亮度

4       下划线

5       闪烁

7       反显

8       消隐

b可以选择30~37(设置前景色)或40~47(设置后景色)

30    black

31    red

32    green

33    yellow

34    blue

35    purple

36    cyan

37    white

在Demo_File.txt中查找”this”,并设置醒目

export GREP_OPTIONS=’--color=auto’ GREP_COLOR=‘1,41’

8.用grep -r来搜索所有文件及子目录

9.用grep -v来显示不匹配的项

10.显示所有不匹配的项

grep -v -e “this” -e “IS” -e “All”

11.用grep -c来计算匹配的数量

grep -c “this” Demo_File.txt

12.计算不匹配的模式数

grep –c -v “this” Demo_File.txt

13.使用grep -l显示匹配的文件名

grep -l “this” Demo_File.txt

14.只显示匹配的字符串

grep -o “lines.*empty” Demo_File.txt

15.只显示匹配的字符串,并输出其偏移量

grep -o -b “D” Demo_File2.txt

16.用grep -n显示行数

grep -n “D” Demo_File2.txt

17.查找文件中的所有的空行

grep ^$ Demo_File2.txt

此文件中没有空行

18.使用grep -f参数,用文件来指定待查找的模式

模式文件是:pattern.txt

grep -f pattern.txt Demo_File2.txt

19.使用-r参数查找子目录

grep “ab”                          在当前目录下搜索带”ab”的行

grep -r “ab”             在当前目录及其子目录下搜索带”ab”的行

grep -l -r “ab”          在当前目录及其子目录下搜索带”ab”行的文件,但是不显示此行,只显示匹配到的文件名

grep -nr BLOG* .     查找子目录,匹配后输出行号

grep -lr BLOG* .      查找子目录,匹配后只输出文件名

20.grep不显示本身

ps aux | grep ssh | grep -v "grep"

21.查找指定进程

ps -ef | grep bash

21.查找指定进程个数

ps -ef | grep -c bash

22.从文件中读取关键字进行搜索

输出test1.txt文件中含有tets2.txt文件中读取出的关键词的内容行,可用于按指定关键词搜索日志文件

cat tets1.txt | grep -f test2.txt

cat test1.txt | grep -nf test2.txt

23.一次性执行多个命令

显示搜索后的列头和数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值