linux中的grep命令

定义: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

posted @ 2020-03-22 11:36  老张哈哈哈  阅读(1764)  评论(0编辑  收藏  举报