[Linux] 正则表达式及grep和awk
一、正则表达式
1.1 什么是正则表达式
正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。 正则表达式可以在文本中查找、替换、提取和验证特定的模式。
正则表达式和通配符的区别
正则表达式:匹配文章中的字符
通配符:匹配的是文件名
1.2 元字符
符号 | 作用 |
. | 代表任意字符 |
[] | 代表单个字符 |
[^] | 代表指定范围外的任意单个字符 |
[:space:] | 包括空格,制表符(tab键) |
[:alnum:] | 代表字母和数字 |
[:alpha:] | 代表任意大小写英文字母 |
.
[a-z]
[^li]
[[:space:]]
[[:alnum:]]和[[:alpha:]]
1.3 表示次数
符号 | 作用 |
* | 0——正无穷次 |
.* | 任意长度的任意字符,不包括0次 |
\? | 可有可无,代表一次或0次 |
\+ | 1——正无穷 |
\{n\} | 前面的字符出现了n次 |
\{n,m\} | 前面的字符出现了n-m次 |
\{3,\} | 前面的字符出现了最少3次 |
\{,5\} | 前面的字符出现了最多5次 |
实际应用:
\{n\}前面的字符出现了n次
\{3,\}前面的字符出现了最少3次
\{n,m\}前面的字符出现了n-m次
*0——正无穷次
.* 任意长度的任意字符,不包括0次
\? 可有可无,代表一次或0次
\+ 可有可无,代表一次到正无穷次
\{,3\}前面的字符出现了最多3次
1.4 位置锚定
符号 | 作用 |
^$ | 空行 |
^[[:space:]]*$ | 空白行 |
\<或\b | 字符的开头 |
\>或\b | 字符的结尾 |
实际应用:
过滤出不是以#号开头的行
过滤出"root"这个字符
\<或\b 字符的开头
1.5 分组或其他
分组用括号将需要组合的字符括起来
实际应用:
分组匹配abc
匹配1abc或2abc
使用分组匹配出ip地址
1.6 扩展正则表达式
grep -E或egrep
符号 | 作用 |
* | 匹配前面字符任意次 |
? | 0或1次 |
+ | 1次或多次 |
{n} | 匹配n次 |
{m,n} | 至少m,至多n次 |
{,n} | 匹配前面的字符至多n次,<=n,n可以为0 |
{n,} | 匹配前面的字符至少n次,<=n,n可以为0 |
符号 | 作用 |
() | 分组 |
| | 或者 |
a|b | a或b |
C|cat | C或cat |
(C|c)at | Cat或cat |
练习:
1.表示邮箱
2.表示qq号
3.表示手机号码
二、grep
格式:
grep [选项]… 查找条件 目标文件
选项:
-color=auto 对匹配到的文本着色显示
-m # 匹配#次后停止
grep -m 1 root /etc/passwd #多个匹配只取第一个
-v 显示不被pattern匹配到的行,即取反
grep -Ev '^[[:space:]]*#|^$' /etc/fstab
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
grep -c root /etc/passwd #统计匹配到的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
grep -A3 root /etc/passwd #匹配到的行后3行业显示出来
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file
grep -e root -e bash /etc/passwd #包含root或者包含bash 的行
grep -E root|bash /etc/passwd
-w 匹配整个单词
grep -w root /etc/passwd
useradd rooter
-E 使用ERE,相当于egrep
-F 不支持正则表达式,相当于fgrep
-f file 根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件
-r 递归目录,但不处理软链接
-R 递归目录,但处理软链接
实际应用
过滤非空行
过滤以root开头的行
过滤以bash结尾的行
统计当前主机的连接状态
统计当前连接主机数
三、awk
3.1 什么是awk
AWK 是一款出色的文本处理工具。它是可用于任何环境(不仅仅是 Linux)的最强大的数据处理引擎之一。这种编程和数据处理语言(以其创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏首字母命名)只会随着知识的积累而变得更好,AWK 提供了强大的功能:样式加载 和流式处理、数学运算符、流程控制语句,甚至内置变量和函数。AWK 可以进行样式加载、流式处理、数学运算符、过程控制语句,甚至内置变量和函数。AWK 几乎拥有完整语言的所有强大功能。事实上,AWK 拥有自己的语言:AWK 编程语言被其三位创建者正式定义为 "样式扫描和处理语言"。可以创建无数的简短程序来读取输入文件、排序数据、处理数据、对输入进行计算、生成报告等。
3.2 awk的工作原理
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
通常awk是将一行数据拆分为多个字段,操作者,可以选取指定的字段对其进行高效率的操作
3.3 awk的基础用法
3.3.1 基本打印用法
格式:
awk 选项 '表达式{处理动作}'
符号 | 作用 |
-F | 指定分隔符 |
-v | 指定变量 |
实际应用:
再打印一遍
运算
先处理BEGIN 中的式子
连续的空白符
取分区利用率和IP地址
3.4 awk 常见的内置变量
内置变量 | 作用 |
$0 | 当前处理的行的整行内容 |
$n | 当前处理行的第n个字段(第n列) |
NR | 当前处理的行的行号(序数) |
NF | 当前处理的行的字段个数。$NF代表最后一个字段 |
FS | 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同 |
OFS | 输出内容的列分隔符 |
FILENAME | 被处理的文件名 |
RS | 行分隔符。awk从文件中读取资料时,将根据RS的定义把资料切割成许多条记录, 而awk一次仅读入一条记录进行处理。预设值是"\n" |
3.5 自定义变量
root CXK /opt] awk -v test='hello' 'BEGIN{print test}'
hello
[root CXK /opt]
3.6 打印行内容及其行号
awk '{print NR}' test.txt
awk '{print NR,$0}' test.txt
3.6.1 指定行和指定行范围打印
awk 'NR==3{print}' test.txt awk 'NR==3,NR==5{print}' test.txt awk '(NR>=3)&&(NR<=5){print}' test.txt
3.6.2 奇偶行打印
awk 'NR%2==0{print}' test.txt awk 'NR%2==1{print}' test.txt
3.6.3 文本内容匹配过滤打印
awk '/^root/{print}' /etc/passwd
awk '/bash$/{print}' /etc/passwd
3.7 BEGIN END
BEGIN{}:仅在开始处理文件中的文本之前执行一次
END{}:仅在文本处理完成之后执行一次
应用:
3.8 条件判断打印
正向判断打印:
awk -F: '$3>500{print $0}' /etc/passwd
判断取反打印:
awk -F: '!($3>10){print $0}' /etc/passwd
此之外,甚至可以直接进行if语句判断打印:
awk -F: '{if($3>500){print $0}}' /etc/passwd
3.9 for
计算
3.10 awk结合数组运用
3.10.1 awk中定义数组打印
awk 'BEGIN{a[0]=10 ; a[1]=20 ; a[2]=30;print a[1]} 'awk 'BEGIN{a[0]=10 ; a[1]=20 ; a[2]=30;print a[0]} 'awk 'BEGIN{a[0]=10 ; a[1]=20 ; a[2]=30;print a[2]} '
此外:awk中的数组还能形成遍历
awk 'BEGIN{a[0]=10 ; a[1]=20 ; a[2]=30;for(i in a)print i,a[i]} '定义数组及其元素 变量i读取数组a的下标 输出数组下标及其相对应的元素
3.10.2awk打印文件内容去重统计
去重打印数组
echo ${arry[@]}|awk -v RS=' ' '!a[$1]++'指定分隔符为空格 筛选掉重复的元素awk -v RS=' ' '!a[$1]++' <<< ${arry[@]}表达式中重定向输入将右边的数组作为左边表达式子的处理对象
处理文件去重统计
awk '{a[$1]++};END{for(i in a){print i,a[i]}}' test.txt
题目:统计ssh登录失败的用户及其登录失败(日志:/var/log/secure中有记录)的次数(通常我们会认为失败三次,存在着暴力破解登录的可能,意味该主机存在隐患)解决方案:将其筛选出来就把IP加入到黑名单中 /etc/hosts.deny。
awk筛选统计:
awk '/Failed password/{a[$11]++};END{for(i in a){print i,a[i]}}' /var/log/secure
其他方式:
awk '/Failed password/{print $11}' /var/log/secure |sort -n
awk '/Failed password/{print $11}' /var/log/secure |sort -n |uniq -c
一些题目:
提取字段中的 IP地址和时间
awk '{print $1, $4}' log.txt
提取某一时间段的日志
cat access_log |awk '/2018:11:56:43/,/2018:11:56:44/{print $0}'
提取host.txt主机名后再放回host.txt文件
awk '{print $2}' host.txt >> host.txt
cat host.txt|awk '{print $2}'|awk -F'.' '{print $1}' >> host.txt cat host.txt|awk -F '[ .]' '{print $2}'
统计/etc/fstab文件中每个文件系统类型出现的次数
cat /etc/fstab |awk '{print $3}'|grep -v "^#"|grep -v "^$"|tail -n +4|sort|uniq -c
统计/etc/fstab文件中每个真单词出现的次数
grep -o -w -E '\b[[:alpha:]]+\b' /etc/fstab | sort | uniq -c
提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字
echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw" | grep -o -E '[0-9]+'
查出/tmp/的权限,以数字方式显示
stat -c %a /tmp/
stat /tmp/|sed -nr '4s/.*\((.*)\/.*\) Uid.*/\1/p'
查出用户UID最大值的用户名、UID及shell类型
awk -F: '{print $1, $3, $7}' /etc/passwd | sort -t" " -k2 -n | tail -n 1
总结:
1. awk是一种对文件输出内容的字段(列),进行操作的工具,多数用来提取重要数据
2. awk 结合数组时可以进行数组定义,数组遍历,以及数组元素的去重统计
3.提取文件数据时,注意每行或列的分隔符,正确借用分隔符能够使提取的数据更加精确
相关文章:

[Linux] 正则表达式及grep和awk
一、正则表达式 1.1 什么是正则表达式 正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。 正则表达式可以在文本中查找、替换、提取和验证特定的模式。 正则表达式和通配符的区别 正则…...

ssm+java车辆售后维护系统 springboot汽车保养养护管理系统+jsp
以前汽车维修人员只是在汽车运输行业中从事后勤保障工作,随着我国经济的发展,汽车维修行业已经从原来的从属部门发展成了如今的功能齐备的独立企业。这种结构的转变,给私营汽修企业和个体汽修企业的发展带来了契机,私营企业和个体维修企业的加入也带动了整个汽修行业的整体水平…...

HNU练习七 字符串编程题7. 机器人游戏
【问题描述】 有人建造了一些机器人,并且将他们放置在包含n个单元的一维网格上,一个长度为n的字符串s代表了他们的编排方式,字符串中的字符既可以是.,也可以是0~9之间的一个数字字符,字符.表示开始时在相应的单元上无机…...

【Linux】bash 终端指令
bash # 查看当前使用的shell $ echo $SHELL /bin/bash# 查看当前发行版可以使用的shell $ cat /etc/shells 或 chsh -l /bin/sh /bin/bash /sbin/nologin /bin/zsh /bin/tcsh /bin/csh# 切换bash $ chsh -s /bin/bash# 切换zsh $ chsh -s /bin/zsh进程 $ ps aux | grep pwd w…...

基于SpringBoot高校心理教育辅导设计与实现
摘 要 随着Internet技术的发展,心理教育辅导系统应运而生,心理教育辅导系统为用户提供了一个更为便利的心理测试咨询平台。所以,为了充分满足高校学生心理教育辅导的需求,特开发了本高校心理教育辅导系统。 本高校心理教育辅导系统…...

关于电脑提示vcruntime140_1.dll无法继续执行代码的解决办法
vcruntime140_1.dll是Visual C运行时库的一个组成部分,它包含了大量用于支持C应用程序运行时的功能。这个文件通常在开发和使用C程序时被调用,特别是在使用Microsoft Visual Studio进行开发时。vcruntime140_1.dll文件丢失或损坏会导致C程序无法正常运行…...

5. 链表
内存空间是所有程序的公共资源,在一个复杂的系统运行环境下,空闲的内存空间可能散落在内存各处。我们知道,存储数组的内存空间必须是连续的,而当数组非常大时,内存可能无法提供如此大的连续空间。此时链表的灵活性优势…...

OSI七层模型与TCP/IP四层模型的区别(计算机网络)
一、OSI七层网络模型 OSI 网络模型共有 7 层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。 应用层,负责给应用程序提供统一的接口;表示层,负责把数据转换成兼容另一个系统能识别的格式;会话…...

Other--什么是 CGI,FastCGI、asp、jsp
文章目录 1. 了解什么是动态网页2. 什么是 CGI2.1 CGI 概念2.2 CGI 功能2.3 CGI 作用2.4 CGI 分类2.5 CGI 程序的工作原理2.6 CGI 程序的特点2.7 CGI 程序的应用领域4. 什么是 FastCGI4.1 FastCGI 概念4.2 FastCGI 程序工作原理4.3 FastCGI 对进程的管理方式4.4 FastCGI 的特点…...

sql关联另一个表,update表的值
sql示例: update student_score ss set ss.names.name from student s where ss.codes.code 最常见的学生成绩表 student_score通过学生student_code关联学生信息表student 学生信息表(student): code name age gender 1001 …...

Python基础:JSON保存结构化数据(详解)
1. JSON概念 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生产。 虽然JSON使用JavaScript语法来描述数据对象,但是JSON仍然独立于语言和平台,JSON解…...

抑郁症日常如何调节?
抑郁症是一种常见的心理障碍,影响患者的情绪、思维和身体健康。以下是一些建议,帮助抑郁症患者进行日常调节: 保持积极心态:积极的心态是应对抑郁症的关键。尝试保持乐观、积极的态度,看待生活中的困难和挑战。尽管抑…...

hive两张表实现like模糊匹配关联
testa表(字段a)aaabbacccddddddaaatestb表(字段b)ab1. 使用likeconcat模糊配对 selecta.a from testa a ,testb b where a like concat(%,b.b,%) group by a.a2. 使用locate函数 selecta.a from testa a ,testb b where locate(b.b,a.a)>0 group by a.a3. 使用instr函数 sel…...

【高效开发工具系列】Hutool DateUtil工具类
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

基于springcloud openfein 使用示例,包含代码和 maven 依赖配置
使用 Spring Cloud 和 OpenFeign 可以轻松实现微服务之间的通信。以下是一个简单的示例,演示如何在Spring Boot应用中使用Spring Cloud OpenFeign。 首先,确保您的项目中添加了 Spring Cloud 和 OpenFeign 的依赖。这里提供 Maven 依赖配置:…...

彰显营销硬实力!皓量科技连续四年入选《中国数字营销生态图》
11月28日,中国商务广告协会数字营销专业委员会、虎啸奖组委会、秒针营销科学院共同发布了《中国数字营销生态图(2023版)》(以下简称生态图)。凭借多年在广告营销领域的精耕细作,皓量科技从2020年开始连续4年…...

web静态网页设计与制作-基于HTML+CSS+JS实现旅游摄影网站
web静态网页设计与制作,基于HTMLCSSJS实现精美的旅游摄影网站,拥有极简的设计风格,丰富的交互动效,让人眼前一亮,享受视觉上的体验。 我使用了基本的HTML结构来构建网页,并使用CSS样式进行美化设计…...

每日一题:LeetCode-1089. 复写零
每日一题系列(day 09) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🔎…...

React Native环境搭建及Hello World
写这篇博客的目的就是想说,react native 挺简单,但是大部分初级前端会被环境搭建给难住,从而放弃. 环境搭建 环境搭建其实说简单也挺简单的,有经验的前端直接翻看react native中文文档就行,直接按上面来肯定没错 以下以安卓开发,windows配置环境为例,来演示一遍 首先 电脑…...

VS2017 C++ Qt工程打包软件
在Debug模式下或者Release模式下编译成功,会在工程的Debug文件夹和Release文件夹生成exe执行文件,以Debug为例,将Debug模式下的exe复制到新的文件夹路径下,然后打开Qt中的MSVC 2017 64-bit 打开后然后在命令窗口cd到exe的路径下&…...

【JWT的原理和使用】
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。 文章目录 一、跨域认证的问题二、JWT 的原理三、JWT 的数据结构3.1 Header3.2 Payload3.3 Signature3.4 Base64URL 四、JWT 的使用方式五、JWT 的几个特点…...

对本地存储的有效期的理解
本地存储是一种在Web开发中常用的客户端存储数据的方式,它可以让网页应用程序在用户的浏览器中存储和检索数据,而无需依赖服务器来保存信息。本地存储的有效期是指数据存储在用户的设备上可以被访问和保留的时间段。在本地存储中,有两种主要的…...

蓝桥杯-02-蓝桥杯Java组考点与14届真题
文章目录 蓝桥杯Java组考点与14届真题参考资源Java组考点1. 组别2. 竞赛赛程3. 竞赛形式4. 参赛选手机器环境5. 试题形式5.1. 结果填空题5.2. 编程大题 6. 试题考查范围7. 答案提交8. 评分9. 样题样题 1:矩形切割(结果填空题)样题 2ÿ…...

门户网站二级等保评测问题,服务器漏洞问题解决办法
二级等保查出来的服务器问题 操作前可在自己服务器测试一下,看看有没有用 1.服务器定时更换密码 永久(需重启) vim /etc/login.defs PASS_MAX_DAYS 90 # 密码最长过期天数 PASS_MIN_DAYS 0 # 密码最小过期天数 PASS_MIN_LEN 10 # 密码…...

NPDP考前注意事项,这些细节你可要注意!
产品经理国际资格产认证(NPDP)2023年考试将于2023年12月2日(本周六)进行,你准备好了吗? 考试详情 考试时间:2023年12月2日 上午9:00-12:30 考试题型:200题,单选题。 考…...

八个优秀开源内网穿透工具
内网穿透(NAT穿透)是一种将本地网络服务暴露给互联网的一种技术。这种技术可以很好地解决许多局域网内的资源共享。采用路由的方式将一台计算机变成一个“路由器”,将公共的网络地址转为内部网络地址,从而实现通过英特网可以访问局…...

C语言贪吃蛇(有详细注释)
这个贪吃蛇是在比特特训营里学到的,同时我还写了用EasyX图形库实现的图形化贪吃蛇,含有每个函数的实现以及游戏中各种细节的讲解,感兴趣的可以去看一看。 贪吃蛇小游戏 实现效果 以下就是源码,感兴趣的小伙伴可以cv自己玩一玩改…...

MUI框架从新手入门【webapp开发教程】
文章目录 MUI -最接近原生APP体验的高性能前端框架APP开发3.25 开发记录miu框架介绍头部/搜索框:身体>轮播图轮播图设置数据自动跳转:九宫格图片九宫格图文列表底部选项卡按钮选择器手机模拟器 心得与总结:MUI框架在移动应用开发中的应用M…...

HNU-计算机网络-讨论课2
第二次 有关网络智能、安全以及未来网络的讨论 一、必选问题(每组自由选择N个,保证组内每人负责1个) 网络的发展促进信息的传播,极大提高了人类的感知能力,整个世界都被纳入人类的感知范围。但人们对信息系统以及数据…...

西南科技大学信号与系统A实验一(信号的产生与时域运算)
目录 一、实验目的 二、实验原理 三、实验内容 四、思考题 一、实验目的 1、 掌握用matlab软件产生基本信号的方法。 2、 应用matlab软件实现信号的加、减、乘、反褶、移位、尺度变换及卷积运算 二、实验原理 (一) 产生信号波形的方法 利用Matlab软件的信号处…...