学习目标
1.学会使用 grep
2.学会使用 sed
3.学会使用 awk
4.学会使用正则表达式
一、什么是三剑客
正则三剑客:grep sed awk
1.三剑客grep
# 擅长过滤
# grep参数
-n 行号
-c 对结果行计数
-i 不区分大小写
-v 反向搜索,取反
-w 精准匹配
-o 只显示匹配的结果
-A1 同时打印搜索结果行的后一行
-B3 同时打印搜索结果行的前三行
-C2 同时打印搜索结果行的上下各两行
-E 扩展正则表达式
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
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代表行号
过滤文本
文本拼凑
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次,前一个字符
举个例子:
再举一个例子:
规则没有写好导致没有下载到大部分图片,
但是基本步骤就是这样,重点是规则写好匹配得上才能下载大部分图片。
grep -Eo 'https[a-z.:/\-]+img.com.cn/t_s[0-9a-zA-Z/_-]+\.jpg'
url.txt |awk '{print "wget "$1}' |/bin/bash
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+$'
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
4.找出弱密码,密码长度低于8或者只有纯数字或者纯字母的为弱密码
答案:
grep -E '^.{1,7}$|^[0-9]+$|^[a-z]+$|^[A-Z]+$' mima.txt
5.过滤出正确的邮箱地址
答案:
grep -E '^[0-9a-zA-Z]+@.*\.[a-z]+$' mail.txt
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
总结
以上就是今天要讲的内容,三剑客和正则表达式要学习的知识点非常多,而且这一块知识比较绕,容易让人感到云里雾里的,要把每句的意思理解了才能运用自如,还远远不够,需要经常反复练习。