0


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通过扩展正则表达式搜索

egrep 与 grep -E 相同

我们知道正则表达式分为基本正则表达式和扩展正则表达式,但是grep只支持基本正则表达式,如果要用扩展正则表达式,需要使用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'字符串

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

grep 'o{2}' test.txt

在test.txt中查找包含连续两个o的行

grep '[a-z]{7}' *.txt

显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行

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

  1. -I (大写的i) 等同于 --binary-files=without-match 不处理二进制文件

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


本文转载自: https://blog.csdn.net/inxunxun/article/details/128167642
版权归原作者 int8 所有, 如有侵权,请联系我们删除。

“grep命令”的评论:

还没有评论