grep作为linux运维必备命令之一,我日常用的到的,能和grep匹敌的,估计只有awk 和sed 这两个命令了
grep到底是什么呢?global search regular expression(RE) and print out the line ,通俗意义上的解释就是全局搜索匹配到的关键词,并将匹配的行打印出来
在windows下,我们可以文件编辑器类似notepad++ ,在打开的文件中使用Ctrl+F来搜索当前文件,当然windows下也有其他工具可以检索整个目录下的文件,然后找到匹配我们关键词的所有文件,但是linux操作系统下(只讨论命令行),没有操作界面的情况下,我们需要有一个强力的搜索工具帮我们检索内容,这个工具就是grep
我们从最基本的例子开始讲起:4个测试文件(test1 test2 test3 test4 ,文件内容分别是不同的文件),真正的场景文件的数量和内容会比测试文件更加复杂,数量少当然可以逐个打开然后查找,但是如果有1000+文件,我们是不可能逐个打开的
1 2 3 4 5 6 7 8 9 10 |
$ ls test1.txt test2.txt test3.txt test4.txt $cat test1.txt spring flower $ cat test2.txt summer rain $cat test3.txt autumn leaf Box $ cat test4.txt winter snow |
基本场景1:查找指定的词在哪个文件
1 2 |
$ grep summer * test2.txt:summer rain |
这个是当我们查找指定的单词 summer,我们需要指定两个参数给grep,一个是我们要查找的关键词,例子中是summer,然后第二个参数是需要查找的文件,例子中是*,也就是当前文件夹下所有的文件
然后grep就会帮我们查找,如果查找到了,便会输出在哪个文件,并输出匹配的行,如果没找到,则不会输出任何内容
基本场景2: 忽略大小写的查找关键词
1 2 |
bash-3.2$ grep box * bash-3.2$ |
我们发现,当我们查找关键词 box的时候,我们没有得到任何的输出,说明grep没有发现任何匹配的文件,但是其实test3中是存在内容的Box的,为什么没匹配到呢?是因为grep默认是大小可敏感的,如果我们想忽略关键的大小写的花,我们需要使用参数 -i ignore-case
1 2 |
bash-3.2$ grep -i box * test3.txt:autumn leaf Box |
基本场景3:高亮显示匹配的词,有时候我们需要高亮显示我们匹配到的词让我们更方便的看到关键词所在的位置
1 2 |
bash-3.2$ grep -i box * --color test3.txt:autumn leaf Box |
场景4:递归文件夹查找
例如我们在当前目录新增一个文件夹level1,然后在文件夹level1中新增一个文件夹vvvv.txt
1 2 3 4 5 6 7 8 |
tree learn_grep learn_grep ├── level1 │ └── vvvv.txt ├── test1.txt ├── test2.txt ├── test3.txt └── test4.txt |
场景5:如果我们需要查找当前目录并且递归查找子目录的话,我们需要增加参数-R
1 2 3 |
grep dengni -R * --color level1/vvvv.txt:erwo zai dengni level1/vvvv.txt:dengni |
场景6:如果我们匹配age ,但是我们又想显示匹配行的下一行的age,我们可以这么用-A1:
1 2 3 4 5 |
$ grep -i age --color -R * level1/vvvv.txt:age: 19 bash-3.2$ grep -i age --color -R * -A1 level1/vvvv.txt:age: 19 level1/vvvv.txt-name: Jeremy |
场景7:如果我们匹配的是name,但是我们想一起显示匹配行的上一行,我们可以使用-B1:
1 2 3 4 5 |
bash-3.2$ grep -i name --color -R * level1/vvvv.txt:name: Jeremy bash-3.2$ grep -i name --color -R * -B1 level1/vvvv.txt-age: 19 level1/vvvv.txt:name: Jeremy |
我们可以使用man grep来查看完整的文档来学习更多高深的grep使用技巧,如上基本就是最常用到的grep命令了
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021