定义:grep用来搜索文件中符合条件的字符串,并返回包含该字符串的所有行
语法:
grep [options] pattern [files]
一些常见选项的解释
-c : 计算包含样式的行数 -h : 显示包含该样式的行,但是不显示该行所属的文件的名字 -i : 忽略字符大小写的差别 -l : 只展示文件名字 -n : 展示包含该样式的行以及行号 -v : 显示所有不包含样式的行 -e exp : 指定字符串作为查找文件内容的范本样式。 -f file : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每一行的规则样式。 -E : 将样式作为扩展的正则表达式使用 -w : 只显示全字符合的行 -o : 只显示包含pattern的那一行中匹配成功的部分,且每部分逐行显示
grep应用举例
1) 如何在linux的文件中查找一个字符串. 比如我想在/etc/passwd中查找yiran这个用户,输入
grep yiran /etc/passwd
输出
yiran:x:1000:1000:Yiran,,,:/home/yiran:/bin/bash
如果想让grep忽略pattern的大小写,可以使用-i选项
grep -i yiran /etc/passwd
事实上最后一个命令和如下命令的作用是一样的
cat /etc/passwd | grep -i yiran
同理 cat /etc/passwd | grep yiran 和 grep yiran /etc/passwd 结果也是一样的
2) 如何递归的使用grep, 比如我想在facenet这个文件夹下中查找所有的'.jpg'文件,但是facenet这个文件夹又包含很多个文件夹,这时候可以用-r递归的查询facenet中的每个文件夹
grep -r '.jpg' facenet
输出
显示的结果中,左边的是找到的行所在的文件名,如果我们不希望出现这些文件名可以使用-h选项
grep -h -r '.jpg' facenet
或者
grep -hr '.jpg' facenet
3)如何使用grep只搜索完整字符串?换句话说当我们想查找ha这个词,grep命令可能会返回haha, yaha, hahaha等等,但我只想要ha这个词.这时我们可以用-w这个命令
$ grep -w "ha" file
4)如何用grep在文件中搜索两个不同的词?比如我想在一个文件中查找foo或者boo这个词,可以使用'-E' 加上正则表达式中的分支结构'|':
$ grep -E 'word1|word2' /path/to/file
grep -E和egrep命令实际上是一样的,上面的命令和如下命令等同,会显示所有含有foo的行以及所有含有boo的行.
$ egrep 'word1|word2' /path/to/file
5)如何使用grep实现多条件查询?比如我想查询文件中既含有foo也含有boo这两个词的行,可以使用如下命令,它会返回既包含foo也包含boo的行
grep 'word1' /path/to/file | grep 'word2'
6)如何列出含有pattern的文件的文件名.使用-l命令列出所有含有'main'的c文件
$ grep -l 'main' *.c
7)查找以某一字符串开头的行,比如我想查找以word1开头的所有行,可以用'^'正则表达式来完成此操作
$ grep "^word1" /path/to/file
同理,想查找以某一字符串结尾的行可以用'$'符号
$ grep "word2$" /path/to/file
8) 可以使用-f命令从文本中获取pattern.每行一个pattern
$cat pattern.txt happy enjoy sweet
$grep –f pattern.txt happiness.txt
使用管道和grep命令
管道命令 'cmd1|cmd2' 会将左边命令的输出流作为右边命令的输入流,命令之间存在很强的依赖关系,并且管道命令只能处理正确的输出数据流。
grep经常使用管道的数据进行查找的命令,比如说刚刚用的 cat /etc/passwd | grep -i yiran . 其中grep使用cat的标准输出作为标准输入.
查找正在运行的python进程
ps -aux | grep pyhton
其中ps -aux 会返回目前所有的正在内存当中的程序,grep pyhton会从这些程序中查找pyhton程序.
显示cpu模型的名字
cat /proc/cpuinfo |grep -i 'Model'
输出结果
model : 142 model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz model : 142 model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz model : 142 model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz model : 142 model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
reference How To Use grep Command In Linux / UNIX