grep命令

grep,全称是global regular expressions print
功能就是查找匹配模式的行
grep对文本内容的处理是以行为单位,输出也是输出匹配的行。

也可以使用两个变种程序egrep和fgrep。
egrep与grep -E相同。
fgrep与grep -F相同。

一、语法格式

grep [选项]… 模式 [文件]…
例如:grep -i ‘hello world’ menu.h main.c

二、选项

应用于模式的选项

-E, --extended-regexp     <模式> 是扩展正则表达式
-F, --fixed-strings       <模式> 是字符串
-G, --basic-regexp        <模式> 是基本正则表达式
-P, --perl-regexp         <模式> 是 Perl 正则表达式
-e, --regexp=<模式>       用指定的<模式>字符串来进行匹配操作
-f, --file=<文件>         从给定<文件>中取得<模式>
-i, --ignore-case         在模式和数据中忽略大小写
    --no-ignore-case      不要忽略大小写(默认)
-w, --word-regexp         强制<模式>仅完全匹配字词
-x, --line-regexp         强制<模式>仅完全匹配整行
-z, --null-data           数据行以一个 0 字节结束,而非换行符

输出控制:

-m, --max-count=<次数>    得到给定<次数>次匹配后停止
-b, --byte-offset         输出的同时打印字节偏移
-n, --line-number         输出的同时打印行号
    --line-buffered       每行输出后刷新输出缓冲区
-H, --with-filename       为输出行打印文件名
-h, --no-filename         输出时不显示文件名前缀
    --label=<标签>        将给定<标签>作为标准输入文件名前缀
-o, --only-matching       只显示行中非空匹配部分
-q, --quiet, --silent     不显示所有常规输出
    --binary-files=TYPE   设定二进制文件的 TYPE(类型);
                          TYPE可以是'binary'、'text'、'without-match'
-a, --text                等同于 --binary-files=text
-I                        等同于 --binary-files=without-match
-d, --directories=ACTION  读取目录的方式;
                          ACTION 可以是`read', `recurse',或`skip'
-D, --devices=ACTION      读取设备、先入先出队列、套接字的方式;
                          ACTION 可以是`read'或`skip'
-r, --recursive           等同于--directories=recurse
-R, --dereference-recursive       同上,但遍历所有符号链接
    --include=GLOB        只查找匹配 GLOB(文件模式)的文件
    --exclude=GLOB        跳过匹配 GLOB 的文件
    --exclude-from=FILE   跳过所有匹配给定文件内容中任意模式的文件
    --exclude-dir=GLOB    跳过所有匹配 GLOB 的目录
-L, --files-without-match  只打印没有匹配上的<文件>的名称
-l, --files-with-matches  只打印有匹配的<文件>的名称
-c, --count               只打印每个<文件>中的匹配行数目
-T, --initial-tab         行首制表符对齐(如有必要)
-Z, --null                在<文件>名最后打印空字符

三、参数

1.模式字符串:要查找的字符串。
可以包括多个模式字符串,使用换行符分隔。
为了避免shell先对特殊字符进行处理,一般要用单引号把模式字符串括起来。
2.文件名

四、示例

1.-F选项原样字符串搜索

grep -F 'hello world' test.txt
搜索test.txt文件中,包含'hello world'的行

2.-e选项通过正则表达式搜索


关于正则表达式参考正则表达式
如果不指定选项,默认就是此选项。
-e使用的正则表达式是基本正则表达式。也就是说,像?+{}这些都要在前面加转义符\

grep -e 't[ae]st' test.txt
在test.txt中查找包含tast或test的行

grep '[^a-z]oo' test.txt
在test.txt中查找包含Xoo的行,其中X是一个非a到z的字符

grep '^the' test.txt
在test.txt中查找以the开头的行

grep '^$' test.txt
在test.txt中查找空行

cat test.txt | grep '^[^u]'
输出非u开头的行

grep '<[^>]*>' test.txt
匹配一对括号

grep '.+' test.txt
匹配任意字符后面跟一个+

grep '.\+' test.txt
匹配长度大于0的行

3.-E选项通过扩展正则表达式搜索


正则表达式分为基本正则表达式和扩展正则表达式,但是grep默认只支持基本正则表达式,如果要用扩展正则表达式,需要使用grep -E或者egrep。

egrep '.+' test.txt
匹配长度大于0的行

egrep 'gd|good' test.txt
在test.txt中查找包含gd或good的行

egrep 'g(la|oo)d' test.txt
在test.txt中查找包含glad或good的行

egrep 'A(xyz)+C' test.txt
在test.txt中查找包含AXC的行,其中X是一个或一个以上的'xyz'字符串

egrep 'o{2}' test.txt
在test.txt中查找包含连续两个o的行

egrep '[a-z]{7}' *.txt
在当前目录下所有.txt文件中查找包含连续7个小写字母的字符串的行

ip address | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'
查找包含ip地址的行

ip address | grep -E '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}'
查找包含ip地址的行

4.-c选项只输出行数

grep -c 'CLERK' emp.data
输出包含CLERK的行的数量

5.-f选项从文件中读取模式

cat test.txt | grep -f test2.txt
输出test.txt文件中含有从test2.txt文件中模式的行

6.-n选项显示行号

grep -n 'linux' test.txt

7.-v选项查找不包含模式的行

grep -v 'abc' test.txt
在test.txt中查找不包含abc的行

8.-o选项只显示匹配的部分,而不是整行

grep -o 'linux' test.txt

9.-I(大写的i)选项不查找二进制文件

find . -type f -print0 | xargs -0 grep -I 'xxx'

10.-P使用perl正则表达式

grep -P 'start(?= test)' xx.txt
查找必须在' test'紧前面的start

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值