color选项增加颜色渲染

使用拓展正则表达式

如果要使用正则表达式,需要添加-E选项——这意味着使用扩展(extended)正则表达式。或者也可以使用默认允许正则表达式的grep命令——egrep。例如:

$ grep -E "[a-z]+" filename 
#或者
$ egrep "[a-z]+"

仅输出匹配结果

使用 ​​-o​

[root@CentOS ~]# grep word readme
this is the line containing word
[root@CentOS ~]# grep word readme -o

翻转匹配

​-v, --invert-match​​翻转匹配即是将不属于模式的内容输出

[root@CentOS ~]# grep -v word readme 
this is

输出匹配行或者匹配项个数

@CentOS ~]# cat readme
this is the line containing word, word
this is a simple line.

[root@CentOS ~]# grep -c word readme
1
[root@CentOS ~]# grep -o word readme |wc -l
2

输出匹配文件

​-l​

[root@CentOS ~]# grep -l word readme out.html 

输出行号

​-n​

Perl正则表达式

​-P​

字节偏移

​-b​

-b, --byte-offset
Print the 0-based byte offset within the input file before each line of output. If -o (--only-matching) is specified, print the offset
of the

​-o​​ 只输出匹配单词结果

[root@CentOS ~]# grep -b -o word readme 
28:word
34:word
39:word
[root@CentOS ~]# cat readme
this is the line containing word, word
word
this is

递归搜索文件

​-R​

[edemon@CentOS tmp]$ grep "open" . -R 
./write.c: int fd = open("./tmp.txt",O_WRONLY|O_CREAT|O_TRUNC,0644);
./write.c: perror("tmp.txt open wrongly");

忽略大小写

​-i​

[edemon@CentOS tmp]$ echo "HAha" |grep -i "haha"
HAha

多模式匹配

使用​​-e​​选项

[edemon@CentOS tmp]$ echo this is a line |grep -e "is" -e "line" -o
is
is

使用文件

[edemon@CentOS tmp]$ echo -e "is\nline" > pattern_txt
[edemon@CentOS tmp]$ cat pattern_txt
is
line

[edemon@CentOS tmp]$ echo this is a line |grep -f pattern_txt -o
is
is

搜索时包括文件或排除文件

​include​​​ 或 ​​exclude​

[edemon@CentOS tmp]$ grep "open" . -r --include *.c
./write.c: int fd = open("./tmp.txt",O_WRONLY|O_CREAT|O_TRUNC,0644);
./write.c: perror("tmp.txt open wrongly");
[edemon@CentOS tmp]$ grep "open" . -r --exclude *.c

排除目录:​​--exclude-dir​​​
从文件中读取所需排除的文件列表: ​​​--exclude-from FILE​

静默输出

​-q​​​选项可以使得grep不输出任何东西到stdout。即使出现出错。
当返回值是0时,则找到了对象。非0则没找到。

[edemon@CentOS workspace]$ cat auto.c |grep -q longjmp
[edemon@CentOS workspace]$ echo $?
0

匹配文本上下文输出

#输出4后面2行
[edemon@CentOS workspace]$ seq 10 |grep 4 -A 2
4
5
6
#输出4前面2行
[edemon@CentOS workspace]$ seq 10 |grep 4 -B 2
2
3
4
#输出4前后两行
[edemon@CentOS workspace]$ seq 10 |grep 4 -C 2
2
3
4
5
6

其他

【linux shell】grep 常用选项_正则表达式

edemon@linux:~$ cat tt
“在这个世界上,分裂是最大的痛苦,堤坝的分裂会导致洪灾,地表的分裂会导致地震,山峦的分裂会带来山崩,爱情的分裂会带来离婚,同样你和自我的分裂会带来一生的痛苦和遗憾。人生最大的痛苦莫过于知道该怎么做却没有去做,你会自责,你会对自己不满意,你会觉得自己是渺小的、不讲信誉不可信的。总而言之,就是你开始不信任自己,自信心降低了。”


真正能自控的人是内心和谐的人,他们将自己内心的每一部分需求都当作朋友来看待,这样每一部分都不会捣乱。这样的人不是试图控制或压制一些缺点,而总能从它们当中找到正面的信息。


仔细地聆听一下你内心的声音,你会听见,你心中有一个部分在大喊:你整天做令人烦躁和劳累的工作,你太需要休息和娱乐了。现在,你要感谢这个“次人格”对你的关心和帮助,告诉它你一定会去。但此时此地,你必须先把手头的工作完成。这个时候,你会发现,那些曾经让你分心的想法不再纠缠你了,它相信了你的承诺。

edemon@linux:~$ grep -n "分裂" tt    #tt中包含"分裂"的所有行
1:“在这个世界上,分裂是最大的痛苦,堤坝的分裂会导致洪灾,地表的分裂会导致地震,山峦的分裂会带来山崩,爱情的分裂会带来离婚,同样你和自我的分裂会带来一生的痛苦和遗憾。人生最大的痛苦莫过于知道该怎么做却没有去做,你会自责,你会对自己不满意,你会觉得自己是渺小的、不讲信誉不可信的。总而言之,就是你开始不信任自己,自信心降低了。”
edemon@linux:~$ grep -v "分裂" tt   #tt中不包含"分裂"的所有行


真正能自控的人是内心和谐的人,他们将自己内心的每一部分需求都当作朋友来看待,这样每一部分都不会捣乱。这样的人不是试图控制或压制一些缺点,而总能从它们当中找到正面的信息。


仔细地聆听一下你内心的声音,你会听见,你心中有一个部分在大喊:你整天做令人烦躁和劳累的工作,你太需要休息和娱乐了。现在,你要感谢这个“次人格”对你的关心和帮助,告诉它你一定会去。但此时此地,你必须先把手头的工作完成。这个时候,你会发现,那些曾经让你分心的想法不再纠缠你了,它相信了你的承诺。

edemon@linux:~$ grep -c "分裂" tt   #输出行数
1

edemon@linux:~$ grep -l "分裂" *
grep: c: Is a directory
grep: d: Is a directory
grep: Desktop: Is a directory
grep: Documents: Is a directory
grep: Downloads: Is a directory
grep: e: Is a directory
grep: f: Is a directory
grep: Music: Is a directory
grep: Pictures: Is a directory
grep: pra.link: Is a directory
grep: Public: Is a directory
grep: sda: Is a directory
grep: Templates: Is a directory
tt
grep: Videos: Is a directory

edemon@linux:~$ grep -s "分裂" *   #和前者比较少了很多乱七八糟的出错信息
tt:“在这个世界上,分裂是最大的痛苦,堤坝的分裂会导致洪灾,地表的分裂会导致地震,山峦的分裂会带来山崩,爱情的分裂会带来离婚,同样你和自我的分裂会带来一生的痛苦和遗憾。人生最大的痛苦莫过于知道该怎么做却没有去做,你会自责,你会对自己不满意,你会觉得自己是渺小的、不讲信誉不可信的。总而言之,就是你开始不信任自己,自信心降低了。
edemon@linux:~$ grep -r doc *   #递归搜索当前目录下含关键词grep的文本内容

grep 使用 -w 后相应的元字符变成普通字符,使用参数x匹配整行
edemon@linux:~$ cat tt
#!/bin/bash
echo "the time is "
date
echo here is :
who
echo
edemon@linux:~$ grep -w echo tt
echo "the time is "
echo here is :
echo
edemon@linux:~$ grep -x echo tt
echo

echo $? 用于输出上一条命令的退出状态(返回码)0表示成功执行,1表示未得到结果,2表示产生语法错误
edemon@linux:~$ echo $?
0
edemon@linux:~$ grep -x echo ttt
grep: ttt: No such file or directory
edemon@linux:~$ echo $?
2

edemon@linux:~$ cat tt
ab
ab
cv
ab
edemon@linux:~$ grep -b -w ab tt  #打印匹配行距离首部的偏移量
0:ab
3:ab
9:ab    #解释,每一个串计上'\0'
edemon@linux:~$ cat tt
ab ab cv ab
edemon@linux:~$ grep -b -o -w ab tt #匹配词的偏移量
0:ab
3:ab
9:ab
edemon@linux:~$ grep -b -w ab tt
0:ab ab cv ab

查找tt文件中的空白行和非空白行
edemon@linux:~$ grep ^$ tt
edemon@linux:~$ grep ^[^$] tt
精确匹配:
edemon@linux:~$ grep "\<ab\>" tt
ab
edemon@linux:~$ grep -w ab tt
ab

grep 命令族:
grep 标准,支持基本正则表达式
egrep (grep -E) 拓展,支持拓展正则表达式
fgrep (grep -F) 快速,不支持正则表达式

不区分大小写的查找:
edemon@linux:~$ grep .*[aA].* tt   #查找含a或者A的文本
34.eA
asa

行尾判断:
edemon@linux:~$ grep -E [^A-Za-z]$ tt
:
213
edemon@linux:~$ grep -E :$ tt
: