作者简介
李先生(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字符串的字符串
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\}'

八、学习交流

欢迎大家关注我的公众号,一起交流、学习。

最新文章

  1. My first win32 application program
  2. 注册表(C#)
  3. ecshop二次开发之常用函数及汇总
  4. ElasticSearch5+logstash的logstash-input-jdbc实现mysql数据同步
  5. mac命令行常用
  6. ubuntu14.04 配置中文输入法
  7. BZOJ2733 [HNOI2012]永无乡
  8. Oracle帮助类
  9. 【转】Mysql 存储引擎中InnoDB与Myisam的主要区别
  10. String to Integer (atoi)
  11. 【转】解析Java finally
  12. C++:this指针
  13. poj 3501 Escape from Enemy Territory 二分+bfs
  14. [Node.js] Exporting Modules in Node
  15. [PWA] 3. Devtool
  16. .NET单元测试艺术(3) - 使用桩对象接触依赖
  17. JDBC的链接及封装
  18. Google API Design Guide (谷歌API设计指南)中文版
  19. python 笔记数据类型
  20. 如何将文本编辑器嵌入框架--以Umeditor&CodeIgniter框架为例

热门文章

  1. C#声明一个100大小的数组 随机生成1-100之间不重复的数
  2. 【自用】Notice
  3. 【题解】「UVA10116」Robot Motion
  4. python协程需要注意的
  5. schema与数据类型优化-高性能mysql
  6. js常见正则表达式
  7. SpringBoot + Layui + JustAuth +Mybatis-plus实现可第三方登录的简单后台管理系统
  8. CTF练习 ①
  9. Spring Cloud OpenFeign的原理(六)
  10. Vue必须必须要注意的几个细节