01、Linux 三剑客介绍
grep
global search regular expression(RE) and print out the line 基于正则表达式查找满足条件的行
awk
名字来源于三个作者的名字简称
根据定位到的数据行处理其中的分段
sed
stream editor
根据定位到的数据行修改数据
>
02、与 SQL 的对比
Linux 三剑客 SQL Structured Query Language
grep 数据查找定位 select * from table like ‘%xx’
awk 数据切片 select field from table
sed 数据修改 update table set field=new where field=old
03、平台实现差异与官方文档
mac 上的实现与 gnu 的实现有差异
不同版本之间有小的语法差异
可以通过独立下载 gawk 等工具实现
04、官方文档
https://www.gnu.org/software/grep/manual/grep.html
https://www.gnu.org/software/gawk/manual/gawk.html
https://www.gnu.org/software/sed/manual/sed.html
05、BRE 基本正则表达式
^ 开头 $结尾
[a-z] [0-9] 区间,如果开头带有^表示不能匹配区间内的元素
* 0 个或多个
. 表示任意字符
06、ERE 扩展正则表达式
基本正则表达式(BRE)基础上的扩展
? 非贪婪匹配
+ 一个或者多个
() 分组
{} 范围约束
| 匹配多个表达式的任何一个
07、Linux 三剑客之 grep
global search regular expression(RE) and print out the line
基于正则表达式查找满足条件的行
08、内容检索
获取行 grep pattern file
获取内容 grep -o pattern file
获取上下文 grep -A -B -C pattern file
09、文件检索
递归搜索 grep pattern -r dir/
展示匹配文件名 grep -H 111 /tmp/1
只展示匹配文件名 grep -l 111 /tmp/1
10、范围约束
忽略大小写 grep -i pattern file
不显示匹配的行 grep -v pattern file
使用扩展正则表达式 grep -E pattern file
文件范围和目录范围约束 grep 111 -r /tmp/demo/ --include "11*"
11、进程检索
进程过滤场景比较特殊,需要注意
grep 本身会开启新进程,所以需要单独过滤掉 grep 进程
原命令:ps -ef | grep ssh
503 2507 1 0 29 821 ?? 0:00.08 /usr/bin/ssh-agent
503 50022 11154 0 8:11下午 ttys002 0:00.00 grep ssh
使用这个命令:ps -ef | grep ssh | grep -v grep
503 2507 1 0 29 821 ?? 0:00.08 /usr/bin/ssh-agent