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命令使用大全的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式开发中常用的命令

命令大全

shell grep 命令大全

linux命令大全20180614

grep命令 一 文本搜索工具

正则表达式:数字开头中间字母结尾数字