shell三剑客介绍及实例
Linux三剑客指的是grep、d、awk,配合正则表达式使⽤就⾮常强⼤,笔者个⼈感觉会使⽤普通的场景就⾜够⼯作中适⽤了,其中grep擅长查找功能,d擅长取⾏和替换。awk擅长取列,笔者分别针对这些功能列举语法以及实际案例。新⼿⼊门,如有问题,欢迎指正 ~
最开始,先介绍⼀下管道的概念,| 这个竖线就是管道的意思,后⽂中会持续⽤到该符号,作⽤就是将前⼀个命令的输⼊输送给 | 后⾯的命令,可以进⾏多重管道,例如:
⼀、grep
grep作⽤是筛选,查询
1. 语法规则
Usage: grep [选项]... 匹配项 [⽂件]...
⽀持的正则描述
-E,--extended-regexp 模式是扩展正则表达式(ERE)
-e,--regexp=PATTERN 使⽤模式匹配,可指定多个模式匹如何激发学生的学习兴趣
-f,--file=FILE 从⽂件每⼀⾏获取匹配模式
-i,--ignore-ca 忽略⼤⼩写
-w,--word-regexp 模式匹配整个单词
-x,--line-regexp 模式匹配整⾏
输出控制描述
-m,--max-count=NUM 输出匹配的结果 num 数
-n,--line-number 打印⾏号
-H,--with-filename 打印每个匹配的⽂件名
trar -h,--no-filename 不输出⽂件名
-o,--only-matching 只打印匹配的内容
-q,--quiet 不输出正常信息
美国vs英国 -s, --no-messages 不输出错误信息
-r,--recursive 递归⽬录
-c,--count 只打印每个⽂件匹配的⾏数
--include=FILE_PATTERN 只检索匹配的⽂件
--exclude=FILE_PATTERN 跳过匹配的⽂件
--exclude-from=FILE 跳过匹配的⽂件,来⾃⽂件模式
--exclude-dir=PATTERN 跳过匹配的⽬录
-v,--invert-match 打印不匹配的⾏
内容⾏控制描述
-B,--before-context=NUM 打印匹配的前⼏⾏
英语词根表
-A,--after-context=NUM 打印匹配的后⼏⾏
-C,--context=NUM 打印匹配的前后⼏⾏
--color[=WHEN], 匹配的字体颜⾊
2. 案例
# 很常⽤的使⽤ grep 筛选⽬前服务器使⽤的java tomcat nginx进程
# 查询⽇志关键词 -e 达标多个条件
# 输出查询内容后5⾏的⽇志
# 通过正则来筛选结果
# 查询以 ACTIVITY 开头的⽇志
# 查询所有出现的时间
# 查询出所有符合条件的IP地址
⼆、d
d作⽤是过滤和替换⽂本。
1. 语法规则
prize是什么意思 d [选项] '地址命令' file
选项描述
-n 不打印模式空间
-e 执⾏脚本、表达式来处理
-f 执⾏动作从⽂件读取执⾏
-i 修改原⽂件
-r 使⽤扩展正则表达式
地址描述
first~step 步长,每 step ⾏,从第 first 开始
$ 匹配最后⼀⾏
/regexp/ 正则表达式匹配⾏
number 只匹配指定⾏
addr1,addr2 开始匹配 addr1 ⾏开始,直接 addr2 ⾏结束
addr1,+N 从 addr1 ⾏开始,向后的 N ⾏
addr1,~N 从 addr1 ⾏开始,到 N ⾏结束
命令描述
s/要替换的内容/替换成的内容/ 替换字符串
p 打印当前模式空间
P 打印模式空间的第⼀⾏
复活节
d 删除模式空间,开始下⼀个循环
D 删除模式空间的第⼀⾏,开始下⼀个循环
= 打印当前⾏号
2. 案例
# 替换输⼊内容(其中不以g结尾是替换每⾏中的第⼀个"11",否则就是替换所有的"11")
# 替换⽂件内容并覆盖(-i 参数代表替换⽂件内容)
、
三、awk
awk是⼀个处理⽂本的编程语⾔⼯具,能⽤简短的程序处理标准输⼊或⽂件、数据排序、计算以及⽣成报表等等。搏击俱乐部经典台词
1. 语法规则
基本的命令语法:awk option 'pattern {action}' file
其中 pattern 表⽰ AWK 在数据中查找的内容,⽽ action 是在找到匹配内容时所执⾏的⼀系列命令。花括号⽤于根据特定的模式对⼀系列指令进⾏分组。
选项描述
siao
-f program-file 从⽂件中读取 awk 程序源⽂件
-F fs 指定 fs 为输⼊字段分隔符
-v var=value 变量赋值
pattern (匹配模式)
/regular expression/ 为每个输⼊记录匹配正则表达式
pattern && pattern 逻辑 and,满⾜两个模式
pattern || pattern 逻辑 or,满⾜其中⼀个模式
! pattern 逻辑 not,不满⾜模式
BEGIN{ } 给程序赋予初始状态,先执⾏的⼯作
END{ } 程序结束之后执⾏的⼀些扫尾⼯作
2. 案例
# 输出指定列
# 指定分隔符
# BEGIN END的使⽤(可以⽤作格式化输出,也可以在其中做⼀些初始化,以及收尾的⼯作)
高考下午几点开始几点结束 # 格式化输⼊
# 初始化分隔符和换⾏符,最后列数与记录数
其中: FS 输⼊字段分隔符,默认是空格或制表符
RS 输⼊记录分隔符,默认是换⾏符\n
NF 统计当前记录中字段个数
NR 统计记录编号,每处理⼀⾏记录,编号就会+1
# 使⽤正则的场景(筛选出符合条件的列,按照默认空格切分后,输出第三列)
写在⽂末:列举了这么多,实际都是想象中的⽤法,实际⼯作中我⽬前只⽤到了 grep的简单场景,如有啥问题,请多包涵【狗头】 中国旅游景点介绍