正则四

==============================

00. 课程回顾说明
三剑客命令老二: sed
1) 概述说明
a 擅长对行进行操作
b 擅长编辑修改文件(后向引用前向)

2) 命令执行过程
1. 按行读取文件内容
2. 将每一行读取出来,存放模式空间
3. 检查是否匹配上了需求
匹配上了: 进行操作处理 增 删 改
没有匹配: 将一行内容进行默认输出,再读取下一行
PS: 不想让信息默认输出 -n 取消默认输出
4. 处理操作完成后, 会继续处理下一行

3) 命令实际操作演示
查询匹配
a 按照行号进行匹配
sed -n ‘3p‘ 文件信息
1) 进行多行匹配(连续的)
sed -n ‘3,5p‘ 文件信息
2) 进行多行匹配(不连续的)
sed -n ‘3p;5p‘ 文件信息
b 按照字符进行匹配
sed -n ‘/oldboy/p‘ 文件信息
1) 进行多行匹配(连续的)
sed -n ‘/oldboy/,/oldgirl/p‘ 文件信息
2) 进行多行匹配(不连续的)
sed -n ‘/oldboy/p;/oldgirl/p‘ 文件信息
PS: 查询信息时如果使用了正则符号,对于扩展正则符号(-r)

添加信息
a 再一行的后面进行添加信息
sed ‘3a oldboy‘ 文件信息
sed ‘/oldboy/a oldboy100‘ 文件信息
b 再一行的前面进行添加信息
sed ‘3i oldboy‘ 文件信息
sed ‘/oldboy/i oldboy100‘ 文件信息
PS: 如果想添加多行内容
sed ‘3a oldboy03;4a oldboy04‘ 文件信息 错误的
sed -e ‘3a oldboy03‘ -e ‘4a oldboy04‘ 文件信息 正确的

删除信息
按行删除数据信息
sed ‘3d‘ 文件信息
按字符信息删除数据
sed ‘/oldboy/d‘ 文件信息
PS: 此时的删除只是模拟删除, 真正删除需要使用-i参数

修改信息
a 按行整个一行内容进行修改
sed ‘3c oldboy01‘ 文件信息

b 按行一行部分内容进行修改
sed ‘3s#(.*)#<\1>#g‘ 文件信息
PS: 此时的修改只是模拟修改, 真正修改需要使用-i参数

sed命令要真正对文件进行编辑 需要使用 -i参数
使用注意事项:
a 再使用-i参数时, 请把参数放在所有参数后面使用 再-i参数后写上 .bak 继续备份
b 再使用-i参数时, 请一定不要结合-n参数一起使用

4) sed命令练习题:
1) 如何批量修改文件扩展名
2) 如何批量创建用户并设置随机密码

01. 企业需求测验:
1) 如何取出IP地址信息(grep sed)
方法一: 利用sed
第一个历程: 如何获得IP地址
ip address show eth0

第二个历程: 将IP地址所在的行过滤出来
ip address show eth0|sed -n ‘3p‘

第三个历程: 将一行中没有的信息进行删除
ip address show eth0|sed -n ‘3p‘|sed -r ‘s#^.*net (.*)#\1#g‘|sed -r ‘s#(.*)/24.*$#\1#g‘
截取IP地址前的信息 截取IP地址后的信息
命令优化
ip address show eth0|sed -n ‘3p‘| sed -r ‘s#^.*net (.*)/24.*$#\1#g‘
终极优化
ip address show eth0|sed -nr ‘3s#^.*net (.*)/24.*$#\1#gp‘

sed -n ‘3 p‘
sed -r ‘s#^.*net (.*)/24.*$#\1#g‘
sed -nr ‘3s#^.*net (.*)/24.*$#\1#gp‘

方法二: 利用grep
第一个历程: 如何获得IP地址
ip address show eth0

第二个历程: 将IP地址所在的行过滤出来
ip address show eth0|grep "inet "

第三个历程: 取出IP地址信息
ip address show eth0|grep "inet "|grep -E "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"

命令优化
ip address show eth0|grep "inet "|grep -E "([0-9]+\.){3}[0-9]+"
终极优化
ip address show eth0|grep "inet "|grep -E "([0-9]+\.?){3}"
ip address show eth0|grep "inet "|grep -E "([0-9]+\.?){4}" -o|head -1

方法三: 利用awk取出IP地址

02. 三剑客命令-老大 awk
概念说明:
a 擅长对列进行操作处理
b 擅长对文件数据进行分析统计

03. awk命令操作处理文件内容的方法
1) 查询操作
2) 排除操作
3) 替换操作
4) 统计操作

04. awk命令格式与操作原理
命令格式:
sed [参数] ‘指令信息‘ 文件信息
awk [选项] ‘模式{动作}‘ [文件信息]
模式: 匹配的条件 /oldboy/

05. awk实践操作过程:
生成模拟环境
cat >> ~/reg.txt<<EOF
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
EOF
采取测验完成需求的方式
01. 显示xiaoyu的姓氏和ID号码
第一历程: 根据需求找到符合条件的信息
按行查找
awk ‘NR==2‘ ~/reg.txt
[[email protected] ~]# awk ‘NR==2‘ ~/reg.txt
Zhang Xiaoyu 390320151 :155:90:201
[[email protected] ~]# awk ‘NR==2{print $0}‘ ~/reg.txt
Zhang Xiaoyu 390320151 :155:90:201

字符查找
~ 表示按列进行匹配
!~ 表示案列进行排除匹配
awk ‘/Xiaoyu/‘ ~/reg.txt 错误
awk ‘$2~/Xiaoyu/‘ ~/reg.txt 按列匹配

第二历程: 满足条件的信息进行处理
[[email protected]com.cn ~]# awk ‘NR==2{print $1,$3}‘ ~/reg.txt
Zhang 390320151
[[email protected] ~]# awk ‘NR==2{print $1" "$3}‘ ~/reg.txt
Zhang 390320151

[[email protected] ~]# awk ‘$2~/Xiaoyu/{print $1" "$3}‘ ~/reg.txt
Zhang 390320151

02. 姓氏是zhang的人,显示他的第二次捐款金额及他的名字
第一历程: 根据需求找到符合条件的信息
字符查找
[[email protected] ~]# awk ‘$1~/Zhang/‘ reg.txt
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
[[email protected] ~]# awk ‘/^Zhang/‘ reg.txt
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201

第二历程: 满足条件的信息进行处理
[[email protected] ~]# awk ‘/^Zhang/{print $2,$4}‘ reg.txt
Dandan :250:100:175
Xiaoyu :155:90:201
无法取出第4列中的部分内容
[[email protected] ~]# awk -F "[ :]+" ‘/^Zhang/{print $2,$5}‘ reg.txt
Dandan 100
Xiaoyu 90
[[email protected] ~]# awk -F "[ :]+" ‘/^Zhang/{print $2,$(NF-1)}‘ reg.txt
Dandan 100
Xiaoyu 90

awk参数说明:
-F 用于指定awk切割列的条件信息
利用[]+ 可以将连续多个切割字符整合为一个整体

03. 显示所有以41开头的ID号码的人的全名和ID号码
第一历程: 根据需求找到符合条件的信息
[[email protected] ~]# awk ‘$3~/^41/‘ reg.txt
Zhang Dandan 41117397 :250:100:175
Liu Bingbing 41117483 :250:100:175

第二历程: 满足条件的信息进行处理
[[email protected] ~]# awk ‘$3~/^41/{print $1,$2,$3}‘ reg.txt
Zhang Dandan 41117397
Liu Bingbing 41117483

04. 显示所有ID号码最后一位数字是1或5的人的全名
第一历程: 根据需求找到符合条件的信息
[[email protected] ~]# awk ‘$3~/[15]$/‘ reg.txt
Zhang Xiaoyu 390320151 :155:90:201
Wu Waiwai 70271111 :250:80:75
Wang Xiaoai 3515064655 :50:95:135
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175

第二历程: 满足条件的信息进行处理
[[email protected] ~]# awk ‘$3~/[15]$/{print $1,$2}‘ reg.txt
Zhang Xiaoyu
Wu Waiwai
Wang Xiaoai
Li Youjiu
Lao Nanhai

05. 显示Xiaoyu的捐款,每个时都有以$开头, 如$110$220$330
第一历程: 根据需求找到符合条件的信息
[[email protected] ~]# awk ‘$2~/Xiaoyu/‘ reg.txt
Zhang Xiaoyu 390320151 :155:90:201

第二历程: 满足条件的信息进行处理
[[email protected] ~]# awk ‘$2~/Xiaoyu/{print $4}‘ reg.txt
:155:90:201

[[email protected] ~]# awk ‘$2~/Xiaoyu/{gsub(/:/,"$",$4);print $4}‘ reg.txt
$155$90$201

awk替换测试命令
[[email protected] ~]# echo :155:90:201|awk ‘{gsub(/:/,"$",$1);print $1}‘
$155$90$201

补充: awk替换信息语法格式
awk ‘{gsub(//,"",$n);print $n}‘
/要替换修改的信息/,‘修改成什么信息‘,需要修改的列的信息
/:/,"$",

06. awk特殊模式说明
BEGIN{}
1) 再操作文件之前,执行相应操作动作
实际应用: 输出每列的表头信息
2) 可以进行运算
[[email protected] ~]# awk ‘BEGIN{print 3+2}‘
5
[[email protected] ~]# awk ‘BEGIN{print 3-2}‘
1
[[email protected] ~]# awk ‘BEGIN{print 3*2}‘
6
[[email protected] ~]# awk ‘BEGIN{print 3/2}‘
1.5
[[email protected] ~]# awk ‘BEGIN{print 3^2}‘
9
[[email protected] ~]# awk ‘BEGIN{print 3%2}‘
1
[[email protected] ~]# awk ‘BEGIN{print 5%3}‘
2
[[email protected] ~]# awk ‘BEGIN{print 5**3}‘
125
[[email protected] ~]# awk ‘BEGIN{print 2**3}‘
8
[[email protected] ~]# awk ‘BEGIN{print 2^3}‘
8

3) 修饰内置变量???

END{}
1) 再操作文件之后,执行相应操作动作
实际应用: 用于输出最终结果信息???

07. awk对数据文件信息分析处理练习
1) 统计/etc/services文件中空行数量
第一个历程: 如何进行累加运算
[[email protected] ~]# i=1
[[email protected] ~]# awk ‘BEGIN{i=i+1;print i}‘
1
[[email protected] ~]# awk -vi=1 ‘BEGIN{i=i+1;print i}‘
2
[[email protected] ~]# awk -vi=2 ‘BEGIN{i=i+1;print i}‘
3
说明:
a awk -v参数可以设置变量
c awk 调取变量不需要加上$
d awk 默认会将字符当成变量进行调取 如果不想被识别为变量需要加上双引号
e awk 进行累加运算的公式 i=i+1

第二个历程: 将空号找出来,进行累加运算
[[email protected] ~]# awk ‘/^$/{i=i+1;print i}‘ /etc/services
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
只想看最终结果
[[email protected] ~]# awk ‘/^$/{i=i+1}END{print i}‘ /etc/services
17

02. 统计/etc/passwd文件中有多少个虚拟用户
统计文件中所有以nologin结尾的行,总计有多少
[[email protected] ~]# awk ‘/nologin$/{i=i+1}END{print i}‘ /etc/passwd
18
[[email protected] ~]# awk ‘/nologin$/{i++}END{print i}‘ /etc/passwd
18

03. 直接完成求和运算

[[email protected] ~]# seq 10
1
2
3
4
5
6
7
8
9
10
[[email protected]-xiaodao.com.cn ~]# seq 10|awk ‘{i=i+$1;print i}‘
1
3
6
10
15
21
28
36
45
55
[[email protected]-xiaodao.com.cn ~]# seq 10|awk ‘{i=i+$1}END{print i}‘
55
[[email protected]-xiaodao.com.cn ~]# seq 10|awk ‘{i+=$1}END{print i}‘
55

作业:
01. 根据secure文件, 如果统计出哪个IP地址失败次数最多
显示失败的IP地址 显示失败了多少次
按顺序显示前10名
(awk 数组)

原文地址:https://www.cnblogs.com/nsh123/p/12158727.html

时间: 2024-10-06 17:42:22

正则四的相关文章

JS正则四个反斜杠的含义

我们首先来看如下代码,在浏览器中输出的是什么? // 在浏览器中输出的 console.log('\\'); // 输出 \ console.log('\\\\'); // 输出 \\ 一:js正则直接量语法对 反斜杠的含义 1.1  \. 一个反斜杠加点号(.)  var reg1 = /^\.$/g; console.log(reg1.test('.')); // 输出 true, 因为 \. 是对元字符.进行转义,因此匹配字符串中的. console.log(reg1.test('a'))

Flask框架(二)—— 反向解析、配置信息、路由系统、模板、请求响应、闪现、请求扩展、session

目录 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 一.反向解析 1.什么是反向解析 2.使用 二.配置信息 1.默认配置 2.修改方法一--点的方式修改 3.修改方法二--利用字典修改 4.修改方法三--通过py文件修改(常用) 5.修改方法四--利用类或类的路径修改(常用) 6.其他方法修改配置 三.路由系统 1.基本写法 2.转换器 3.路由本质 4.CBV 5.自定义支持正则 四.模板 五.请求与响应 六.session 七.闪现(flash) 1.使用 2.示例

正则中表示一个反斜线要使用四个反斜线

java中反斜线'\'通常和其他字符组合使用,我们有时候称它为转义字符 java代码里 要表示一个反斜线'\'就要写成:双斜线形式"\\",第一个反斜线代表转义,第二个可以看做普通字符 java中奇数个的反斜线不允许出现,除非后面有其他字符,那么最后一个反斜线就被当做了转义字符 正则中要表示一个反斜线就要使用四个反斜线表示"\\\\" 四个反斜线可理解为:前两个"生成"的 转义后两个"生成"的反斜杠.

前端(十四)—— JavaScript基础:Number、Date类、字符串、数组、Math类、正则

JS常用类:Number类.Date类.Math类.字符串.数组.正则 一.Number 1.常用数字 整数:10 小数:3.14 科学计数法:1e5 | 1e-5 正负无穷:Infinity | -Infinity 2.常用进制 二进制:0b1010 以0b开头 八进制:012 以0开头 十进制:10 十六进制:0xA 以0x开头 3.NaN 非数字类型,通过isNaN()进行判断 4.常用常量 最大值:MAX_VALUE(1.7976931348623157e+308) 最小值:MIN_VA

大白话5分钟带你走进人工智能-第十四节过拟合解决手段L1和L2正则

                                                                                                  第十四节过拟合解决手段L1和L2正则 第十三节中,我们讲解了过拟合的情形,也就是过度的去拟合训练集上的结果了,反倒让你的模型太复杂.为了去解决这种现象,我们提出用L1,L2正则去解决这种问题. 怎么把正则应用进去?我们重新审视目标函数,以前我们可以理解目标函数和损失函数是一个东西.而有正则的含义之后,目

RegExp -- 常见四种正则方法

一.正则表达式 1.match()方法 调用 let str = "梦的翅膀受伤了!" let res = str.match('翅膀') match() 方法可在字符串内检索指定的值,这个校验方法有点类似于数组/字符串的indexOf()和lastIndexOf()方法,只不过这两个方法返回的是指定值首次出现的下标索引,而match()返回两种结果: 1.正常的校验指定字符,返回的则是一个不知道是数组,还是对象的字符数据,通过索引0可以获取返回的指定校验字符,但是可以通过.key的方

从零开始学正则(四)

壹 ? 引 我在从零开始学正则(三)这篇博客中介绍了分组引用与反向引用的概念,灵活利用分组能让我们的正则表达式更为简洁.在文章结尾我们留下了两个问题,一问使用正则模拟实现 trim方法:二问将my name is echo每个单词首字母转为大写. 我们先来分析第一个问题,trim属于String方法,能去除字符串头尾空格,所以我们只需要写一个正则匹配头尾空格将其替换成空即可.空格属于空白符,所以这里需要使用字符组  \s ,空格可能有多个,所以要使用量词 + :其次我们需要匹配紧接开头后与结尾前

python学习第十四节(正则)

python2和python3都有两种字符串类型strbytes re模块find一类的函数都是精确查找.字符串是模糊匹配 findall(pattern,string,flags) replace函数'hello python'.replace('p','P')'hello Python' a='sadfadf232wwewfr323rwef34534trwef'import rew=re.findall('\d','sadfadf232wwewfr323rwef34534trwef')w=r

python 基础(四) 正则,递归 生成器

字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的. 下面这张图展示了使用正则表达式匹配的流程 1.Python支持的正则表达式元字符和语法 语法 说明 表