介绍
作用
Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。
常用选项
-i
:忽略大小写进行匹配。-v
:反向查找,只打印不匹配的行。-n
:显示匹配行的行号。-r
:递归查找子目录中的文件。-l
:只打印匹配的文件名。-c
:只打印匹配的行数。- -w: 只输出完全匹配的内容
- -E :启用正则表达式进行查找
- -e: 指定查找内容,可以跟多个
示例
数据准备
cat file1.txt
hello
helloworld
Hello
Helloworld in the testfilel.txt
today is a sunny day
1231adac
案例
普通查找
grep查找对字母大小写敏感,如下显示为,查找包含字符串hello的行
grep hello file1.txt
hello
helloworld
忽略大小写
由于grep查找对字母大小写敏感,如果想忽略大小写,可以使用-i选项,如下所示
grep -i hello file1.txt
hello
helloworld
Hello
Helloworld in the testfilel.txt
反向查找
查找不包含hello的行
grep -v hello file1.txt
Hello
Helloworld in the testfilel.txt
today is a sunny day
显示匹配的行号
如果要显示匹配到字符串内容在文本中的行号,可以使用-n选项
如下,查找所有包含hello的行,忽略大小写,同时显示出查找到行的行号
grep -in hello file1.txt
1:hello
2:helloworld
3:Hello
4:Helloworld in the testfilel.txt
递归查找
如下,在test文件夹下有两个文件file1.txt和file2.txt,其中file2.txt的内容和file1.txt一样
(base) jl@jin-X299X-AORUS-MASTER:~/test/test$ ls
file1.txt file2.txt
查找当前文件夹下所有包含hello的文件
grep -r hello ./
./file2.txt:hello
./file2.txt:helloworld
./file1.txt:hello
./file1.txt:helloworld
查找当前文件夹下所有包含hello的文件,同时忽略大小写
grep -ri hello ./
./file2.txt:hello
./file2.txt:helloworld
./file2.txt:Hello
./file2.txt:Helloworld in the testfilel.txt
./file1.txt:hello
./file1.txt:helloworld
./file1.txt:Hello
./file1.txt:Helloworld in the testfilel.txt
只打印匹配的文件
-l选项只打印匹配的文件,通常用于判断文件内是否包含匹配字符串的内容
(base) jl@jin-X299X-AORUS-MASTER:~/test/test$ grep -l hello file1.txt
file1.txt
(base) jl@jin-X299X-AORUS-MASTER:~/test/test$ grep -l hjj file1.txt
(base) jl@jin-X299X-AORUS-MASTER:~/test/test$
只打印匹配的行数
如下,使用-c选项查找包含字符串hello的内容有几行
(base) jl@jin-X299X-AORUS-MASTER:~/test/test$ grep -c hello file1.txt
2
(base) jl@jin-X299X-AORUS-MASTER:~/test/test$ grep hello file1.txt
hello
helloworld
只输出完全匹配的内容
如下所示,判断文件内是否包含有字符串hello,如果有就显示hello,如果没有则不显示
(base) jl@jin-X299X-AORUS-MASTER:~/test/test$ grep -w hello file1.txt
hello
查找多个内容
查找文件中包含字符串hello或者字符串today的行
方案一,使用-e选项
grep -e hello -e today file1.txt
hello
helloworld
today is a sunny day
方案二,使用正则表达式
grep -E 'hello|today' file1.txt
hello
helloworld
today is a sunny day
查找包含数字的行
启用正则表达式查找包含数字的行
grep -E '[1-9]' file1.txt
1231adac