正则表达式和awk

目录

一、正则表达式

1.正则表达式基本介绍

2.正则表达式分类

3.基本正则表达式分类

4.代表字符

5.表示次数

6.位置锚定

7.分组或其他

8.扩展正则表达式

二、awk

1.语法

2.选项

3.基础用法

4.内置变量

5.条件判断

6.数组

总结:本章主要介绍了正则表达式和awk的相关知识


一、正则表达式

1.正则表达式基本介绍

元字符:不表示本来的含义,在正则表达式中有特殊含义的字符

正则表达式就是元字符的使用

2.正则表达式分类

正则表达式分为:

1.基本正则表达式

2.扩展正则表达式

3.基本正则表达式分类

1.代表字符

2.表示次数

3.位置锚定

4.分组与其他

4.代表字符

.匹配任意单个字符,包括汉字

[]匹配指定范围内的任意单个字符

[^]匹配指定范围外的任意单个字符

[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
\w #匹配单词构成部分,等价于[_[:alnum:]]
\W #匹配非单词构成部分,等价于[^_[:alnum:]]
\S     #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s     #匹配任何空白字符,包括空格、制表符、换页符等等,等价于 [ \f\n\r\t\v]。注意
Unicode 正则表达式会匹配全角空格符

元字符点(.)

[root@localhost ~]# ls /etc/|grep rc[.0-6]
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local
[root@localhost ~]# ls /etc/|grep 'rc\.'     #点需要加转义字符
rc.d
rc.local
[root@localhost ~]# grep r..t /etc/passwd  #r..t ..代表任意两个字符
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@localhost ~]# echo abc |grep a.c
abc
[root@localhost ~]# echo abc |grep a\.c   #这里需要加引号和转义字符
abc
[root@localhost ~]# echo abc |grep "a\.c"
[root@localhost ~]# 

[root@localhost sy]# grep [[:space:]] lc.txt
sjs  
  osk
skm smod
[root@localhost sy]# grep [[:space:]] lc.txt|cat -A  #过滤空行并查看
sjs  $
  osk$
skm smod$

5.表示次数

* #匹配前面的字符任意次,包括0次
.* #任意长度的任意字符,不包括0次
\? #匹配其前面的字符出现0次或1次,即:可有可无
\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\} #匹配前面的字符n次
\{m,n\} #匹配前面的字符至少m次,至多n次
\{,n\}  #匹配前面的字符至多n次,<=n
\{n,\}  #匹配前面的字符至少n次

[root@localhost sy]# echo google |grep 'go\{2\}gle'  #\{2\}代表前面的o出现2次
google
[root@localhost sy]# echo goooogle |grep 'go\{2,\}gle'  #\{2,\}代表前面的o出现2次以上
goooogle
[root@localhost sy]# echo gooooogle |grep 'go\{2,5\}gle'  #\{2,5\}代表前面的o出现2到5次
gooooogle
[root@localhost sy]# echo gooooooogle |grep 'go*gle'  #*代表前面的o出现0到任意次
gooooooogle
[root@localhost sy]# echo google |grep 'go*gle'  
google
[root@localhost sy]# echo ggle |grep 'go*gle'
ggle
[root@localhost sy]# echo gjevfnsjkgbgle |grep 'g.*gle'  #.*代表任意匹配所有
gjevfnsjkgbgle
[root@localhost sy]# echo gjgle |grep 'g.*gle'
gjgle
[root@localhost sy]# echo ggle |grep 'g\?gle'  #\?代表一次或者0次
ggle
[root@localhost sy]# echo gooogle |grep 'go\+gle'  #\+代表一个以上
gooogle

6.位置锚定

^ 代表开头

$ 代表结尾

\<和\b  代表字符串的开头,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)

\>和\b  代表字符串的结尾,用于单词模式的右侧

\<单词\>  匹配整个单词

[root@localhost sy]# grep "^[^#]" /etc/fstab  #过滤出不是#号开头的行
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=c691f6ac-d1a0-46ad-b02b-7c6256963e6b /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@localhost sy]# vim lc.txt
[root@localhost sy]# grep "^google$" lc.txt  #只过滤google
google
[root@localhost sy]# grep "^[[:space:]]*$" /etc/fstab  #只匹配空白行

[root@localhost sy]# echo hello-123 |grep "\<123"  #只匹配123
hello-123
[root@localhost sy]# echo hello 123 |grep "\<123"  
hello 123
[root@localhost sy]#

7.分组或其他

分组:使用( ) 将多个字符捆绑在一起,当作一个整体处理,如(root)+

后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名

方式为: \1, \2, \3, ...

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

\|:代表或者

[root@localhost sy]# echo abccc |grep "abc\{3\}"
abccc
[root@localhost sy]# echo abcabcabc |grep "\(abc\)\{3\}"
abcabcabc
[root@localhost sy]# echo 1abc |grep "1\|2abc"
1abc
[root@localhost sy]# echo 1abc |grep "\(1\|2\)abc"
1abc
[root@localhost sy]# echo 2abc |grep "\(1\|2\)abc"
2abc

ifconfig ens33 |grep netmask|grep -Eo '([0-9]{1,3}.){4}'
172.16.114.10 
255.255.255.0 
172.16.114.255

8.扩展正则表达式

grep -E

1.表示次数

*   匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{m,n} 至少m,至多n次
{,n}  #匹配前面的字符至多n次,<=n,n可以为0
{n,} #匹配前面的字符至少n次,<=n,n可以为0

2.表示分组

() 分组
分组:() 将多个字符捆绑在一起,当作一个整体处理,如:\(root\)+
后向引用:\1, \2, ...
| 或者  
a|b #a或b
C|cat #C或cat
(C|c)at #Cat或cat

3.练习:

表示qq号

[root@localhost ~]# echo "940132245" |grep "\b[0-9]\{6,12\}\b"
940132245

表示邮箱

echo "zhou@qq.com" |grep -E "[[:alnum:]_]+@[[:alnum:]_]+\.[[:alnum:]_]+"
zhou@qq.com

表示手机号

echo "13703296734"|grep -E "\b1[3456789][0-9]{9}\b"
13703296734

二、awk

1.语法

awk [选项] '表达式 {处理动作}'

表达式:找到特定的行

处理动作:print打印 printf打印

2.选项

-F 指定分隔符

-v 指定变量

-f 脚本

3.基础用法

[root@localhost ~]# awk '{print}'
^C
[root@localhost ~]# awk '{print}'
dd
dd
dd
dd
^C
[root@localhost ~]# awk '{print "hello"}'
1
hello
1
hello
1
hello
^C
[root@localhost ~]# awk 'BEGIN {print 100*20}'
2000

awk -F: 'BEGIN {print "hello"} {print $1}' /etc/passwd |head -n3  #先处理BEGIN 中的式子
hello
root
bin

[root@localhost ~]# echo {a..b} |awk '{print $1}'
a
[root@localhost ~]# df|awk '{print $5}'
已用%
12%
0%
0%
1%
0%
18%
1%
1%
0%

[root@localhost ~]# cat /etc/passwd|awk -F: '{print $1"\t"$3}'|head -n2
root    0
bin    1

df |awk -F"( +|%)" '{print $5}'
已用
12
0
0
1
0
18
1
1
0

ifconfig ens33|grep netmask |awk '{print $2}'  #提前IP地址
172.16.114.10

4.内置变量

awk 选项 '模式{print }'

1.FS :指定每行文本的字段分隔符,缺省为空格或制表符(tab)。与 “-F”作用相同 -v "FS=:"

2.OFS:输出时的分隔符

3.NF:当前处理的行的字段个数

4.NR:当前处理的行的行号(序数)

5.$0:当前处理的行的整行内容

6.$n:当前处理行的第n个字段(第n列)

7.FILENAME:被处理的文件名

8.RS:行分隔符。awk从文件上读取资料时,将根据RS的定义就把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是\n

BEGIN{}:仅在开始处理文件中的文本之前执行一次

END{}:仅在文本处理完成之后执行一次

[root@localhost ~]# awk -v FS=':' '{print $1FS$3}' /etc/passwd |head -n3
root:0
bin:1
daemon:2
[root@localhost ~]# awk -F: '{print $1":"$3}' /etc/passwd |head -n2
root:0
bin:1
[root@localhost ~]# fs=":";awk -v FS=$fs '{print $1FS$3}' /etc/passwd |head -n3
root:0
bin:1
daemon:2
#如果-F -FS一起使用 -F的优先级高

[root@localhost ~]# echo $PATH |awk -v RS=':' '{print $0}'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin

awk -F: '{print NF}' /etc/passwd  #代表字段的个数
7
7
[root@localhost ~]# awk -F: '{print $NF}' /etc/passwd  #$NF最后一个字段
/bin/bash
/sbin/nologin
/sbin/nologin

[root@localhost ~]# df |awk -F "[ %]+" '{print $(NF-1)}'  #倒数第二行
已用
12
0
0
1
0
18
1
1
0

[root@localhost ~]# awk 'NR==2{print $1}' /etc/passwd  #只取第二行的第一个字段
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]# awk 'NR==1,NR==3{print $1}' /etc/passwd  #打印出1到3 行的第一个字段
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

awk 'NR==1||NR==3{print $1}' /etc/passwd  #打印出1和3行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@localhost ~]# awk '(NR%2)==0{print NR}' /etc/passwd  #打印出函数取余数为0行
2
4
6
[root@localhost ~]# awk '(NR%2)==1{print NR}' /etc/passwd  #打印出函数取余数为1的行
1
3
5
[root@localhost ~]# awk 'NR>=3 && NR<=6{print NR,$0}' /etc/passwd
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync

awk -F: '$3>1000{print}' /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin  #打印出普通用户 过滤第三列 大于1000 的行

awk '/^UUID/{print $1}' /etc/fstab
UUID=c691f6ac-d1a0-46ad-b02b-7c6256963e6b

5.条件判断

awk -F: '{if($3>1000)print $1,$3}' /etc/passwd
nfsnobody 65534
[root@localhost ~]# awk -F: '{if($3>1000){print $1,$3}else{print $3}}' /etc/passwd
0
1
2
3
4
5
6
7
8
11
12
14
99
192
81
999

6.数组

awk数组特性:

1.awk的数组是关联数组(即key/value方式的hash数据结构),索引下标可为数值(甚至是负数、小数等),也可为字符串 1. 在内部,awk数组的索引全都是字符串,即使是数值索引在使用时内部也会转换成字符串 2. awk的数组元素的顺序和元素插入时的顺序很可能是不相同的

2.awk数组支持数组的数组

awk 'BEGIN{a[1]="lc";print a[1]}'
lc
[root@localhost ~]# awk 'BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";print weekdays["mon"]}'
Monday

awk 'BEGIN{a[1]=1;a[2]=2;print length(a);print length("hello")}'  #可以查看数组长度
2
5

去除重复行

cat b.txt
abc
hlj
lsdn
abc
hlj
njds
lksamnf
kfd
[root@localhost sy]# awk '{a[$1]++}END{for (i in a){print i}}' b.txt
lksamnf
njds
hlj
abc
kfd
lsdn

提取下面的字段中的 IP地址和时间

awk
58.87.87.99 - - [09/Jun/2020:03:42:43 +0800] "POST /wp-cron.php?doing_wp_cron=1591645363.2316548824310302734375 HTTP/1.1" ""sendfileon
128.14.209.154 - - [09/Jun/2020:03:42:43 +0800] "GET / HTTP/1.1" ""sendfileon
64.90.40.100 - - [09/Jun/2020:03:43:11 +0800] "GET /wp-login.php HTTP/1.1"""sendfileo

cat b.txt |awk -F"[ []" '{print $1,$5}'
58.87.87.99 09/Jun/2020:03:42:43
128.14.209.154 09/Jun/2020:03:42:43
64.90.40.100 09/Jun/2020:03:43:11

提取host.txt主机名后再放回host.txt文件   >>
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com

[root@localhost sy]# cat host.txt |awk -F"." '{print $1}' >> host.txt
[root@localhost sy]# cat host.txt
www.kgc.com
mail.kgc.com
ftp.kgc.com
linux.kgc.com
blog.kgc.com
www
mail
ftp
linux
blog

总结:本章主要介绍了正则表达式和awk的相关知识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/194165.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享:身份证阅读器在ARM Linux系统调用libwlt2bmp.so解码库实现身份证头像解码

头像解码库&#xff1a;libwlt2bmp.so 照片文件名&#xff1a;photo.bmp 原始身份证相片数据&#xff1a;574C66007E00320000F........&#xff08;此处省略&#xff09; 调用身份证阅读器Linux开发包&#xff0c;然后调用libwlt2bmp.so解码库文件&#xff0c;传入身份证原始…

0基础学习VR全景平台篇第123篇:VR视频航拍补天 - PR软件教程

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 嗨&#xff0c;大家好&#xff0c;今天我们来介绍【航拍VR视频补天】。之前已经教给了大家如何处理航拍图片的补天&#xff0c;肯定有很多小伙伴也在好奇&#xff0c;航拍的VR视频…

地图标注系统v0.10.1

微启地图标注系统 thinkphpuniapp前端&#xff0c;微信小程序已适配&#xff0c;近期更新抖音小程序和QQ小程序&#xff0c;后期上分销功能&#xff0c;标注系统用户粘性不算大&#xff0c;本着小程序用完即走的理念&#xff0c;暂时没打算适配安卓和iOS 主要功能 用户端&am…

移动安全威胁:今天和明天的危险

随着技术的发展&#xff0c;个人和公司的设备、数据和隐私所面临的威胁也在发生变化。在本文中&#xff0c;我们将仔细研究当今移动设备安全面临的主要威胁&#xff0c;并共同探讨不久的将来的前景。 但首先让我们从基础开始&#xff1a;如何对移动设备发起攻击&#xff1f; …

1.ORB-SLAM3中如何保存多地图、关键帧、地图点到二进制文件中

1 保存多地图 1.1 为什么保存(视觉)地图 因为我们要去做导航&#xff0c;导航需要先验地图。因此需要保存地图供导航使用&#xff0c;下面来为大家讲解如何保存多地图。 1.2 保存多地图的主函数SaveAtlas /*** brief 保存地图* param type 保存类型*/ void System::SaveAtlas(…

机器学习中的概率与统计知识点汇总

引言 在学习高级知识时&#xff0c;理解基本概念至关重要。为什么&#xff1f;因为基础知识是您构建高级知识的基础。如果你把更多的东西放在薄弱的基础之上&#xff0c;它最终可能会分裂&#xff0c;这意味着你最终无法完全理解你所学的任何知识。因此&#xff0c;让我们尝试…

如何正确选择爬虫采集接口和API?区别在哪里?

在信息时代&#xff0c;数据已经成为了一个国家、一个企业、一个个人最宝贵的资源。而爬虫采集接口则是获取这些数据的重要手段之一。本文将从以下八个方面进行详细讨论&#xff1a; 1.什么是爬虫采集接口&#xff1f; 2.爬虫采集接口的作用和意义是什么&#xff1f; 3.爬虫…

智慧城市政务一网统管解决方案:PPT全文34页,附下载

关键词&#xff1a;智慧政务解决方案&#xff0c;智慧城市解决方案&#xff0c;智慧政务一网统管解决方案&#xff0c;一网统管治理理念&#xff0c;一网统管治理体系&#xff0c;一网统管治理手段&#xff0c;智慧政务综合服务平台建设 一、智慧城市政务一网统管建设背景 一…

CocosCreator 之 Tween缓动系统的使用

版本&#xff1a; 3.4.0 语言&#xff1a; TypeScript 环境&#xff1a; Mac 简介 在CocosCreator 3.x版本后&#xff0c; Tween缓动系统代替了原有的Action动作。官方使用缓动系统的主要目的之一是用于解决离线动画无法满足需求时的动态动画问题。 简单的示例&#xff1a; …

R语言期末考试复习二

上篇文章的后续&#xff01;&#xff01;&#xff01;&#xff01; http://t.csdnimg.cn/sqvYD 1.给向量vec1设置名为"A","B","C","D","E","F","G"。 2.将矩阵mat1的行名设置为"Row1"&#…

8 个适用于电脑的顶级免费分区恢复软件

Windows PC 上的数据管理有时可能会带来压力&#xff0c;尤其是当您有多个分区时。大多数时候&#xff0c;磁盘管理工具使分析磁盘、释放空间甚至创建分区变得非常容易。但有时会发生不可预见的事件&#xff0c;可能导致分区丢失&#xff0c;从而造成潜在的数据灾难。嗯&#x…

ATA-7030高压放大器在等离子体实验中的应用有哪些

高压放大器在等离子体实验中有多种重要应用。等离子体是一种带电粒子与电中性粒子混合的物质&#xff0c;其具有多种独特的物理性质&#xff0c;因此在许多领域具有广泛的应用&#xff0c;例如聚变能源、等离子体医学、材料加工等。下面安泰电子将介绍高压放大器在等离子体实验…

pycharm安装PyQt5及其工具

PyCharm安装PyQt5及其工具&#xff08;Qt Designer、PyUIC、PyRcc&#xff09;详细教程_pycharm pyqt5-CSDN博客 上面是原文链接&#xff0c;根据原文链接&#xff0c;我重新记录一下。IDE&#xff1a;pycharm 2023.2.5 一共需要安装5个。 在PyCharm中如何完整优雅地安装配置…

Spring-SpringFramework特性以及IOC相关知识

SpringFramework五大模块 特性 IOC思想和DI IOC是容器&#xff0c;用于管理资源 IOC&#xff1a;Inversion of Control 反转控制 DI&#xff1a;Dependecy Injection 依赖注入 组件以预先定义好的方式接受来自容器的资源注入 IOC在Spring中的实现 spring提供两种方式&…

2023.11.27如何使用内网穿透工具实现Java远程连接操作本地Elasticsearch搜索引擎

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar内网穿透工具实现Java远程连接操作本地Elasticsearch。 什么是elasticsearch&#xff1f;一个开源的分布式搜索引擎&#xff0…

Vue 3 面试经验分享

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

powershell获取微软o365 21v日志

0x00 背景 o365 21v为o365的大陆版本&#xff0c;主要给国内用户使用。微软提供了powershell工具和接口获取云上日志。微软o365国内的代理目前是世纪互联。本文介绍如何用powershell和配置证书拉取云上日志。 0x01 实践 第一步&#xff0c;ip权限开通&#xff1a; 由世纪互联…

正则表达式 通配符 awk文本处理工具

目录 什么是正则表达式 概念 正则表达式的结构 正则表达式的组成 元字符 元字符点&#xff08;.&#xff09; 代表字符. 点值表示点需要转义 \ r..t 代表r到t之间任意两个字符 过滤出小写 过滤出非小写 space空格 [[:space:]] 表示次数 位置锚定 例&#xff1a…

小航助学题库蓝桥杯题库stem选拔赛(21年1月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

小航助学题库蓝桥杯题库stem选拔赛(21年3月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…
最新文章