Linux Grep 命令高级用法实例 https://www.cnblogs.com/liulianzhen99/articles/17640357.html
深入浅出:掌握Linux grep命令 https://baijiahao.baidu.com/s?id=1763984183183089036
GREP https://baike.baidu.com/item/GREP/5997841?fr=ge_ala
======================================
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
————————————————
原文链接:https://blog.csdn.net/inxunxun/article/details/128167642