一、前言
自己平时比较喜欢记笔记,工作四五年,笔记上千篇。最近离职了,加上职场瓶颈,准备好好复盘和整理一下相关的笔记、梳理一下知识点,可能后面有一系列的博文输出,从基础到进阶。
二、什么是Grep
Global Regular Expression Print 全局正则表达式
Grep是一个Linux / Unix命令行工具,用于在指定的文件中搜索字符串。文本搜索模式被称为正则表达式。当它找到匹配项时,它将输出带有结果的行。在搜索大型日志文件时,grep命令非常方便。
语法:
grep [options] pattern [files]
三、常用参数
-c: 只输出匹配行的数目
-h: 打印出匹配的行,但是不显示其文件名
-i: 不区分大小写
-l: 查询多文件的时候只输出包含匹配字符的文件名
-n: 打印匹配行以及行号
-v: 反向匹配,即显示不匹配的行
-w: 匹配整个单词,而不是整个字符串
-b: 显示匹配的位置
-o: 只显示匹配的字串
-s: 不显示错误信息
-e exp:匹配多个
-E:使用正则匹配
四、实例
1:匹配项标记颜色
echo "This is a word \n heihei" | grep word --color=auto
2:把/etc/passwd包含root的取出来
grep root /etc/passwd or cat /etc/passwd |grep root
3:把/etc/passwd不包含root的取出来
grep -v root /etc/passwd or cat /etc/passwd |grep -v root
4:demsg输出的信息中找出含eth的行,并且输出行号,有颜色
dmesg | grep eth -n --color=auto
5:demsg输出的信息找出eth的行,并且找出含eth的前两行和后三行
dmesg |grep eth -n -A3 -B2 --color=auto
五、grep退出的状态
echo $? # 0:表示成功 # 1:表示没有匹配到 # 2:表示参数中的文件不存在
六、应用场景
1:匹配行的上下文
ifconfig | grep -C 3 "Link encap"
-A n 后n行,A记忆为(After)
-B n 前n行,B记忆为(Before)
-C n 前n行,后n行,C记忆为(Center)
2:用-c统计数目
grep -c "baidu.com" file.txt
3:根据文件内容查找目录
grep "declare" #当前目录下查找grep -r "declare" #当前目录以及子目录下查找grep -r -l "declare" #查找只显示文件名称,不具体显示的行grep -R --exclude-dir="filename" baidu.com #除开某一个目录不匹配
4、过滤掉注释行
grep ^[^#] filename
5、过滤掉有空格的注释行
grep "^\s*[^# \t].*$" filename
6、在file2中找出包含file1字符串的字符串
file1:ddf ddc file2:shinjldinadcddfddf grep -f file1 file2 #得到的结果:#adcddf#ddf
7、ps aux | grep init 与ps aux |grep [i]nit的区别
ps aux | grep init:
ps aux |grep [i]nit:
第一个init的时候她会把grep init也弄到进程里,所有可以匹配到init
第二个[i]nit的时候会把grep [i]nit 弄到进程里,但是[i]nit只能匹配init和nit,所有就只有一个
echo grep init |grep initecho grep init |grep [i]nitecho grep [i]nit |grep initecho grep [i]nit |grep [i]nit
七、grep -E 与 grep 的区别
1、使用方法
grep -E “^[a-zA-Z0-9]” filename grep "^[a-zA-Z0-9]" filename #如果不加E的话,会匹配出错
2、实例
#下面两个写法都能达到同一个目的,使用-E与不使用-E的写法cat a.txt |grep -oE 'id=[0-9]{9,10}'cat a.txt |grep -o 'id=[0-9]\{9,10\}'
end
作者
李先生(Lemon)