grep && awk && sed
grep 基于正则表达式查找满足条件的行,数据查找定位
awk 根据定位到数据行处理其中的分段,数据切片
sed 根据定位到的数据行修改数据,数据修改
grep
grep pattern(表达式) file(文件)
grep -I pattern file 忽略大小写
grep -v pattern file 不显示匹配的行
grep -o pattern file 把每个匹配的内容用独立的行显示
grep -E pattern file 使用扩展正则表达式
grep -C1 pattern file 打印命中数据的上下一行
grep -B1 pattern file 打印命中数据的上面一行
grep -A1 pattern file 打印命中数据的下面一行
grep pattern -r dir / 递归搜索
练习1
[90092804@shell.ceshiren.com 11]$ grep ff 1.txt
33333ffffff
fff
[90092804@shell.ceshiren.com 11]$ grep FF 1.txt
[90092804@shell.ceshiren.com 11]$ grep -i FF 1.txt
33333ffffff
fff
[90092804@shell.ceshiren.com 11]$ grep -v -i FF 1.txt
90092804@shell.ceshiren.com 11]$ grep -i FF 1.txt
33333ffffff
fff
[90092804@shell.ceshiren.com 11]$ grep ff -r .
Binary file ./.1.txt.swp matches
./1.txt:33333ffffff
./1.txt:fff
[90092804@shell.ceshiren.com 11]$ grep -C1 ff 1.txt
33333ffffff
fff
sss
[90092804@shell.ceshiren.com 11]$ grep -B1 ff 1.txt
33333ffffff
fff
[90092804@shell.ceshiren.com 11]$ grep -A1 ff 1.txt
33333ffffff
fff
sss
pattern 正则表达式
基本表达式(BRE)
• ^ 开头, $ 结尾
• [a-z] [0-9] 区间
• *0个或多个
• .表示任意字符
基本正则(BRE) 与扩展正则的区别(ERE)
• ?非贪婪匹配
• + 一个或者多个
• ()分组
• {} 范围约束
• | 匹配多个表达式的任何一个
练习2
[]是取出一个区间,{}取出范围
[90092804@shell.ceshiren.com ~]$ echo '23456' | grep -oE '[2-5]{1,1}'
2
3
4
5
[90092804@shell.ceshiren.com ~]$ echo '23456' | grep -oE '[2-5]{1,2}' #[2-5]取出区间是2345,然后再{1,2}, 匹配1或2个字符,
23
45
[90092804@shell.ceshiren.com ~]$ echo '23456' | grep -oE '[2-5]{1,3}' #[2-5]取出区间是2345,然后再{1,3}, 匹配1或3个字符,第一个3个字符取出是234, 剩下的5只有一个,还符合,就打印出234 和 5
234
5
[90092804@shell.ceshiren.com ~]$ echo '23456' | grep -oE '[2-5]{2,3}' #[2-5]取出区间是2345,然后再{2,3}, 匹配2或3个字符,第一个3个字符取出是234, 剩下的5只有一个,不符合2个字符,所以就打印出234
234