[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的路径下&…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...