Bootstrap

【三剑客和正则表达式】


学习目标

1.学会使用 grep
2.学会使用 sed
3.学会使用 awk
4.学会使用正则表达式

一、什么是三剑客

正则三剑客:grep sed awk

1.三剑客grep

# 擅长过滤
# grep参数
	-n		行号
	-c		对结果行计数
	-i		不区分大小写
	-v		反向搜索,取反
	-w		精准匹配
	-o		只显示匹配的结果
	-A1		同时打印搜索结果行的后一行
	-B3		同时打印搜索结果行的前三行
	-C2		同时打印搜索结果行的上下各两行
	-E		扩展正则表达式

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16

2.三剑客sed

# 擅长修改
用法:sed [-nri] [动作]  目标文本文件
选项与参数:
	-n:使用安静(silent)模式。在一般sed的用法中,
		所有来自STDIN的数据一般都会被列出到终端上。但如果
		加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。
	-r:sed的动作支持的是延伸型正规表示法的语法(默认是基础正规表示法语法)
	-i:直接修改读取的文件内容,而不是输出到终端。

动作说明:[n1[,n2]]funciton
	n1,n2一般表示为行号

function:
	a:指定行后面插入一行
	d:删除
	i:指定行前面插入一行
	p:打印,#一般和前面的-n参数一起用
	s:替换 需要I忽略大小写,全局替换需要g

17
18
19
20
21
22
23
24
25
26
27

3.三剑客awk

#擅长取列
用法:取列

eg1:取列
	awk '{print $1}'  1.txt
	awk '{print $1,$7}'  /etc/passwd

eg2:指定分割符
	awk -F ":"  '{print $1,$7}'  /etc/passwd
	#[ /]+空格 和斜杠/为分隔符,+代表合并连续的分隔符
	awk -F "[ /]+"  '{print  $2}'  1.txt

eg3:拼凑指定文本,双引号之间原样输出
	awk -F ":"  '{print $1":123:"$7}'  /etc/passwd

eg4:过滤文本
	awk -F "[ /]+"  '$2~/^47/' 1.txt

eg5:根据行号筛选内容
	awk 'NR<=3{print $0}' 1.txt	 
	# 大于>   小于<  等于==   大于等于>=   小于等于<=

awk:$0代表整行,$1代表第一列,$2代表第二列...第十列$10
	最后一列$NF
	NR代表行号

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
过滤文本
51
52
53
54
文本拼凑
55
56

4.正则过滤例子1

1.什么是正则表达式

简单的说,正则表达式就是一套处理大量的字符串而定义的规则和方法。
例如:假设 @代表12345
通过正则表达式这些特殊符号,我们可以快速的过滤、替换需要的内容。
linux正则一般以行为单位处理的。

2.正则表达式

1) ^word 表示搜索以word开头的内容
2) word$ 表示搜索以word结尾的内容
3) ^$  表示空行,不是空格
4) .   代表且只能代表任意一个字符
5) \   转义字符,让有着特殊身份意义的字符,脱掉马甲,还原原型
6) *  重复0个或多个前面的一个字符。不代表所有了
7) .* 匹配所有的字符。 ^.* 任意多个字符开头
8) [abc] 匹配字符集内任意一个字符[a-z]
9) [^abc] ^在中括号里面表示非,不包含a或b或c
10) {n,m} 重复n到m次,前一个字符

举个例子:
57
58
59
60
61
62
63
64
65
66
67
68
69
70
再举一个例子:
71
72
73
74
75
76
77
78
79
80
81
82
83

规则没有写好导致没有下载到大部分图片,
但是基本步骤就是这样,重点是规则写好匹配得上才能下载大部分图片。
grep -Eo 'https[a-z.:/\-]+img.com.cn/t_s[0-9a-zA-Z/_-]+\.jpg' 
url.txt |awk '{print "wget "$1}' |/bin/bash

查IP

5.正则过滤例子2

正则表达式练习
1.从phpone.txt文本中的手机号码过滤出所有联通130/131/132号段的手机号码

2.找出手机靓号(如带连续3个以上连续相同数字的,如有8888或者9999)
	grep -E '^1[0-9]{10}$' phone.txt|grep -E
	 '000+|111+|222+|333+|444+|555+|666+|777+|888+|999'

	grep -E '^1[0-9]{10}$' phone.txt|grep -E 
	'000+$|111+$|222+$|333+$|444+$|555+$|666+$|777+$|888+$|999+$'

84
85
86
87
88

3.将下列文本中的手机号码提取出来
http://so.qqdna.com/nub/15912345678.html
http://so.qqdna.com/nub/13711223344.html
http://so.qqdna.com/nub/13511223344.html
http://so.qqdna.com/nub/13311223344.html
http://so.qqdna.com/nub/13911223344.html
http://so.qqdna.com/nub/13312345678.html

89
90

4.找出弱密码,密码长度低于8或者只有纯数字或者纯字母的为弱密码
答案:
	grep -E '^.{1,7}$|^[0-9]+$|^[a-z]+$|^[A-Z]+$' mima.txt 

91
92
93
94

5.过滤出正确的邮箱地址
答案:
	grep -E '^[0-9a-zA-Z]+@.*\.[a-z]+$' mail.txt 

95
96

6.批量下载页面上的jpg图片,给出详细命令
答案:
	grep -E 'src="https:[^"]+' tupian.txt 
	grep -Eo 'src="https:[^"]+' tupian.txt |grep 'jpg$'|sed 's#src="##g'
	
	grep -Eo 'src="https:[^"]+' tupian.txt |grep 
		-E 'jpg$|png$'|sed 's#src="##g'
		
	grep -Eo 'src="https:[^"]+' tupian.txt |grep -E 
		'jpg$|png$'|sed 's#src="##g' |awk '{print "wget "$1}' |/bin/bash

	grep -Eo 'src="https:[^"]+' tupian.txt |grep -E 
		'\.jpg|\.png'|sed 's#src="##g' |awk '{print "wget "$1}' |/bin/bash

	grep -Eo 'src="https:[^"]+' 
		curl "https://desk.zol.com.cn/fengjing/1920x1080/" 
		|grep -E 'jpg$|png$'|sed 's#src="##g' 
		|awk '{print "wget "$1}' |/bin/bash

97
98
99
100
101
102
103
104
105
106
107
菜鸟教程-正则表达式


总结

以上就是今天要讲的内容,三剑客和正则表达式要学习的知识点非常多,而且这一块知识比较绕,容易让人感到云里雾里的,要把每句的意思理解了才能运用自如,还远远不够,需要经常反复练习。

;