grep命令使用大全
Posted 奇妙之二进制
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep命令使用大全相关的知识,希望对你有一定的参考价值。
grep 指令用于查找文件里匹配指定模式的字符串,如果发现某文件的内容符合所指定的pattern,预设 grep 指令会把含有样式的那一行打印出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
语法
grep [OPTION...] PATTERNS [FILE...]
grep [OPTION...] -e PATTERNS ... [FILE...]
grep [OPTION...] -f PATTERN_FILE ... [FILE...]
实例
1、在当前目录中,查找后缀有 .cpp 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
grep test *.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 127
3: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
以上是关于grep命令使用大全的主要内容,如果未能解决你的问题,请参考以下文章