测开十一期课程笔记-Linux三剑客(grep、awk、sed)

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

课间练习1 —从testerhome获取首页的代码,并统计有多少帖子

[90092804@shell.ceshiren.com ~]$ curl 'https://testerhome.com/' | grep '<a title=*' | grep 'href="' | grep -v '<span class="name"' | grep -v img | wc -l
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 51835    0 51835    0     0   312k      0 --:--:-- --:--:-- --:--:--  314k
48