grep 指令用于查找文件里匹配指定模式的字符串,如果发现某文件的内容符合所指定的pattern,预设 grep 指令会把含有样式的那一行打印出来。若不指定任何文件名称,或是所给予的文件名为 **-**,则 grep 指令会从标准输入设备读取数据。
语法
grep [OPTION...] PATTERNS [FILE...]
grep [OPTION...] -e PATTERNS ... [FILE...]
grep [OPTION...] -f PATTERN_FILE ... [FILE...]
实例
1、在当前目录中,查找后缀有 .cpp 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
greptest *.cpp
2、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:
grep -r update /etc/acpi
3、反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。
查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
grep -v test *test*
grep的高级用法是开启-E选项。
4、grep -E 同时匹配多个关键字–或关系
grep -E "word1|word2|word3" file.txt
5、-E和-v可以一起使用
grep -E -v "test|good" *.cpp
6、grep会打印包含匹配pattern的一整行,如果我们期望只打印匹配的pattern,使用-o选项
7、-w可以实现完整单词匹配,也很有用。例如:
$ grep -w "hello" *.cpp
包含helloworld的行是不会显示的,因为只会匹配含有hello单词的行,单词意味着其前后要有空格间隔。
8、
-A n
A是after的意思 除了显示匹配行,还会显示匹配行后面n行。
-B n
B是before的意思 除了显示匹配行,还会显示匹配行前面n行。
-C n
C是after的意思 显示匹配行上下各n行。
9、–exclude-dir=GLOB 递归搜索时排除匹配模式的目录
10、–exclude-from=FILE 排除匹配模式的文件。
11、-n 顺带输出匹配行的行号
$ grep -n "test"*.cpp 1273:test good
12、以某个单词开头/结尾的行
grep -E "^hello" *.cpp
grep -E "world$" *.cpp
13、不是以某个字母开头/结尾的行
grep -E "[^#]" *.cpp
14、.是特殊字符,表示匹配一个单词。
下面的正则表达式查找 IP 地址 192.168.1.254 将不能获得预期的结果:
grep '192.168.1.254' /etc/hosts
其中三个点都需要被转义:
grep '192\.168\.1\.254' /etc/hosts
版权归原作者 奇妙之二进制 所有, 如有侵权,请联系我们删除。