共计 1850 个字符,预计需要花费 5 分钟才能阅读完成。
作者简介
李先生(Lemon),高级运维工程师(自称),SRE 专家(指标),幻想在 35 岁买一辆保时捷。喜爱钻研底层技术,认为底层根底才是王道。所有新技术都离不开操作系统(CPU、内存、磁盘)、网络等。保持输入输出,记录本人学习的点滴,在平庸中保持前行,总有一天会遇见不一样的本人。公众号:运维汪(ID:Leeeee_Li)。
一、前言
本人平时比拟喜爱记笔记,工作四五年,笔记上千篇。最近到职了,加上职场瓶颈,筹备好好复盘和整顿一下相干的笔记、梳理一下知识点,可能前面有一系列的博文输入,从根底到进阶。
二、什么是 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 字符串的字符串 f
file1:ddf
ddc
file2:shinjldin
adcddf
ddf
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 init
echo grep init |grep [i]nit
echo grep [i]nit |grep init
echo 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\}'