【三剑客和正则表达式】


学习目标

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
菜鸟教程-正则表达式


总结

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

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux三剑客是指grep、awk和sed这三个工具。它们在Linux系统中广泛应用于文本处理和数据分析等任务。正则表达式则是一种用于匹配和处理字符串的强大工具,也是三剑客工具中常用的功能之一。 首先,正则表达式是一种用来描述文本模式的字符序列。它可以用来进行字符串的匹配、查找和替换等操作。在Linux系统中,grep是最常用的正则表达式工具之一。它可以用来在文件中搜索匹配某个模式的行,并将其输出。例如,我们可以使用grep来搜索包含特定关键词的行。 其次,sed是一个强大的流式文本编辑器。它可以根据正则表达式对文本进行编辑和转换操作。可以使用sed命令来删除、替换、插入和移动文本等。例如,我们可以使用sed来替换文件中的某个模式。 最后,awk是一种用于处理和分析文本数据的编程语言。它可以根据指定的规则从文本中提取数据,并进行各种计算和操作。awk使用起来相对复杂一些,但非常强大。可以用它来解析结构化数据、计算统计信息等。例如,我们可以使用awk来提取文件中的某些列或计算某些统计指标。 综上所述,Linux三剑客中的grep、awk和sed都是基于正则表达式的工具,它们可以帮助我们高效地处理和分析文本数据。正则表达式的灵活性和强大功能使得三剑客工具在日常工作中得到广泛应用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值