35、正则表达式
一、正则表达式命令
正则表达式:匹配的是文本内容,linux的文本三剑客都是针对文本内容。
grep 过滤文本内容
sed 针对文本内容进行增删改查
awk 按行取列
文本三剑客----都是按照行进行匹配。
1.1、grep筛选:
grep的作用就是使用正则表达式来匹配文本内容。
选项:
-m 数字 匹配几次之后停止
[root@test1 opt]# grep -m 1 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@test1 opt]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
-v 取反
grep -v root /etc/passwd ##除了root,筛选所有
-n 显示匹配的内容及行号
[root@test1 opt]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
-c 只统计匹配的行数
[root@test1 opt]# grep -c root /etc/passwd
2
-o 仅显示匹配的结果
[root@test1 opt]# grep -o root /etc/passwd
root
root
root
root
-q 静默模式。不输出任何信息。
[root@test1 opt]# grep -q root /etc/passwd > /opt/123.txt
[root@test1 opt]# cat /opt/123.txt
[root@test1 opt]# grep -m 1 root /etc/passwd > /opt/123.txt
[root@test1 opt]# cat /opt/123.txt
root:x:0:0:root:/root:/bin/bash
-A after 数字,后几行
grep -A 3 root /etc/passwd
-B before 数字 ,前几行
grep -B 3 root /etc/passwd
-C 数字,前后各几行
grep -C 3 root /etc/passwd
-e 或者
grep -e root -e xy102 /etc/passwd
-E 匹配扩展正则表达式
-f 匹配两个文件相同的内容,以第一个文件为准
[root@test1 opt]# vim kl1.txt
abc
acv
abf123
234
456
aaa
bbb
ccc
abc
acv
abf123
234
456
aaa
bbb
ccc
abc
acv
abf[root@test1 opt]# vim kl1.txt123
345
qqq
aaa
abf
avg
afh[root@test1 opt]# grep -f kl.txt kl1.txt
123
aaa
abf
-r 递归目录 目录下的文件内容,软连接不包含在内。
[root@test1 opt]# grep -r 123 /opt/
/opt/test41.sh: echo 123 | passwd --stdin $user
/opt/test41.sh: echo 123 | passwd --stdin $user
匹配到二进制文件 /opt/.123.swp
-R 递归目录 目录下的文件内容,软连接包含在内。
[root@test1 opt]# grep -R abf /opt/
/opt/nginx-1.22.0/src/core/ngx_crc32.c: 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
/opt/999.txt:abf123
1.2、sort排序:
sort
以行为单位,对文件的内容进行排序
sort 选项 参数
-f:忽略大小写,相同字母默认大写排在前面
-b:忽略每行之前的空格
-n:按照数字大小进行排序,此时不是按照单个字符进行比较,而是行首所有连续的数字都能被识别,按照识别到的数字的大小进行排序。且此时字母排序优先级高于数字
-r:反向排序
-u:去重,相同内容仅显示一次
-o:把排序后的结果转存到指定文件
-k:指定字段(字符)进行排序
-t:指定字段的分隔符
[root@test1 opt]# sort 123.txt111
112
123
222
333
555
aaa
aaa
aaa
bbb
bbb
cc
ddd
DDD
EEE
nnn
cat file | sort 选项
-f 忽略大小写,默认会把大写字母排在前面
[root@test1 opt]# sort -f 123.txt111
112
123
222
333
555
aaa
aaa
aaa
bbb
bbb
cc
DDD
ddd
EEE
nnn
-b 忽略每行之前的空格,空格也显示(不是把空格删除,只是按照数字和字母的顺序排列)
[root@test1 opt]# sort -b 123.txt 123
345
345345
567
987
aaa
bbb
bbb
BD
bfvf
SD
sdfd
sds
-n 按照数字进行排序
[root@test1 opt]# sort -n 123.txt
aaa
bbb
bbb
BD
bfvf
SD
sdfd
sds123
345
345345
567
987
-r 反向排序
[root@test1 opt]# sort -r 123.txt
sds
sdfd
SD
bfvf
BD
bbb
bbb
aaa
987
567345
345
345123
-u 相同的数据只显示一行
[root@test1 opt]# sort -u 123.txt123
345345
567
987
aaa
bbb
BD
bfvf
SD
sdfd
sds
-o 把排序后结果转存到指定的文件
[root@test1 opt]# sort -u 123.txt123
345345
567
987
aaa
bbb
BD
bfvf
SD
sdfd
sds
[root@test1 opt]# cat 123.txt | sort -rno 234.txt
[root@test1 opt]# cat 234.txt
987
567345
345
345123
sds
sdfd
SD
bfvf
BD
bbb
bbb
aaa
1.3、uniq 去重
uniq 去除连续重复的行,只显示一行
-c 统计连续行的次数,合并连续重复的行
[root@test1 opt]# uniq -c 123.txt1 3451 5671 9871 1232 3451 bbb1 bfvf2 1 sdfd1 SD1 BD2 1 1 sds2 aaa1 bbb
-u 显示仅出现一次的行(包括不适合连续出现的重复行)
[root@test1 opt]# uniq -u 123.txt345
567
987123
bbb
bfvf
sdfd
SD
BDsds
bbb
-d 仅显示连续重复的行(不包括非连续出现的内容)
[root@test1 opt]# uniq -d 123.txt ##显示重复的行
345 aaa
1.4、tr压缩替换
tr:用来对标准输出的字符进行替换,压缩和删除。
-c 保留字符集1的字符,其他的字符用字符集2替换
echo 字符集 |tr -c “字符集1” “字符集2”
[root@test1 ~]# echo abc
abc
[root@test1 ~]# echo abc | tr -c "ab" "d"
abdd
-d 删除字符集中的一部分
echo abc |tr -d “a”
[root@test1 ~]# echo abc | tr -d "a"
bc
-s 把字符集1的部分替换成字符集2的部分,连续重复出现的字符压缩成一个字符
压缩:
[root@test1 ~]# echo aaabaaca | tr -s "a"
abaca
替换压缩:
[root@test1 ~]# echo aaabaaca | tr -s 'a' 'w'
wbwcw
1.5、cut
cut快速裁剪 awk都可以按行取列
对字段进行截取和裁剪。
-d 指定分隔符(默认的分隔符是tab键)
[root@test1 opt]# cut -d ':' -f 1-3 /etc/passwd
root:x:0
bin:x:1
daemon:x:2
-f 对字段进行截取,指定输出段的内容
[root@test1 opt]# cut -d ':' -f 1-3 /etc/passwd
root:0
bin:1
daemon:2
-b 以字节为单位进行截取
-c 以字符为单位进行截取
–complement 输出的时候排除指定的字段
[root@test1 opt]# head -n 1 /etc/passwd | cut -d ':' --complement -f 1-3
0:root:/root:/bin/bash
[root@test1 opt]# head -n 1 /etc/passwd | cut -d ':' --complement -f 1
x:0:0:root:/root:/bin/bash
–output-delimiter 更改输出内容的分隔符
[root@test1 opt]# head -n 1 /etc/passwd | cut -d ':' -f 1-3 --output-delimiter='@'
root@x@0
1.6、split文件的拆分:
split大文件拆分若干个小文件。
-l 按行来进行分割
[root@test1 opt]# split -l 30 test1.txt xy102
-b按照大小来分割
[root@test1 opt]# split -b 30m test1.txt xy102
面试题:
现在有一个日志文件,很大5g。第一个能不能快速打开?
拆分:-l 按行 -b 大小
这种大文件推荐使用按大小。
这种小文件推荐使用按行。
1.7、文件合并:
cat
paste
面试题:
cat合并和paste合并之间的区别:
cat是上下合并。
paste是左右合并。
cat 文本1 文本2 展示不改变
cat 文本1 文本2 > 文本3 合并以后传入文本3中
paste 文本1 文本2 展示不改变
paste 文本1 文本2 > 文本3 合并以后传入文本3中
面试题:主机连接状态有几种
[root@test1 opt]# ss -antp | grep -v 'State' | cut -d " " -f 1 | sort | uniq -c2 ESTAB15 LISTEN
三、正则表达式:
正则表达式:由一类特殊字符以及文本字符所编写的一个模式,模式又来匹配文件当中内容(字符)。
校验我们输入的内容是否满足。格式,长度等等要求。
主要用来匹配文本内容,命令的结果。
通配符:只能用于匹配文件名和目录名。不能匹配文件二点内容和命令结果。
正则表达式:
3.1、基本正则表达式:
元字符(字符匹配)
. :匹配任意单个字符\ :转义符:恢复字符的本意[] :匹配指定的范围内的任意单个字符或者数字,区分大小写,也可以用1-5,a-t这样的方式范围匹配[^] :取反,表示匹配除了^之后的内容^ :匹配以^之后内容开头的字符^# :匹配以#开头的行^$ :匹配空行[ ]:中括号里输入空格,就可以匹配空格注:匹配内容两边需要加引号,单引号双引号都可以
. 任意单个字符,也可以是一个汉字。
\ 转义符 ,恢复其本意。
ls | grep "\."



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

[^]为取反
"^"为 以什么开头的行
^#:以#开头
^$:表示空行



表示次数,匹配字符出现的字数:
*匹配前面的字符任意次,0次也可以。

.*匹配前面的字符,至少有1次。匹配所有。


\?匹配前面的字符,没匹配到就是0次或者1次,可有可无。

\ + 匹配的前面字符,至少出现一次>=1。

\ {n \ }匹配前面的字符=n次,可以小于n,但是不能大于n,而且前面的字符必须是连续出现

\ {m,n \ }匹配前面的字符,最少m次,最多n次,必须是连续出现,超出的不在匹配范围。
\ {,n \ }匹配前面的字符,最多n次,必须是连续出现,超出的不在匹配范围。不能少n次,

\ {n, \ }匹配前面的字符,最少n次

位置锚定:

^:以什么为开头,行首锚定
$:以什么为结尾,行尾锚定


“^root$”:只包含root。


\ < 或者\ b 词首锚定,匹配单词的左侧(连续的数字,字母,下划线都算单词内部)
\ > 或者 \ b 词尾锚定,匹配单词的右侧


\b单词\b:匹配整个单词。空格隔开的也算整个单词。
^单词$:整行只有这一个单词。

区别:
分组和逻辑关系
分组()
或者 |

3.2、扩展正则表达式:


grep -E “” =egrep “”

987-123-4567
987 456-1230
(123) 456-7890

作业:
1、显示/etc/passwd中以sh结尾的行;
[root@localhost opt]# cat /etc/passwd | egrep "sh\b"
2、查找/etc/inittab中含有“以s开头,并以d结尾的单词”模式的行;
[root@localhost opt]# cat /etc/inittab | egrep "\bs[a-z]+d\b"
3、查找ifconfig命令结果中的1-255之间的整数;
[root@localhost opt]# ifconfig | egrep -o "\b[1-9]\b|\b[1][0-9][0-9]\b|\b[2][0-5][0-5]\b"
4、在/etc/passwd中取出默认shell为bash的行;
[root@localhost opt]# cat /etc/passwd | egrep "\bbash\b"
5、高亮显示passwd文件中冒号,及其两侧的字符
[root@localhost opt]# cat /etc/passwd | egrep ".?[:]+.?"
相关文章:
35、正则表达式
一、正则表达式命令 正则表达式:匹配的是文本内容,linux的文本三剑客都是针对文本内容。 grep 过滤文本内容 sed 针对文本内容进行增删改查 awk 按行取列 文本三剑客----都是按照行进行匹配。 1.1、grep筛选: grep的作用就是…...
Ubuntu20.04中复现FoundationPose
Ubuntu20.04中复现FoundationPose 文章目录 Ubuntu20.04中复现FoundationPose1.安装cuda和cudnn2.下载相关资源3.环境配置4.运行model-based demo5.运行ycbv demoReference 🚀 非常重要的环境配置 🚀 ubuntu 20.04cuda 11.8.0cudnn v8.9.7python 3.9.19…...
【Qt快速入门(四)】- QLabel文本框的使用
目录 Qt快速入门(四)- QLabel文本框的使用QLabel文本框的使用QLabel的基本用法1. 创建和设置文本2. 动态设置文本 设置文本样式1.设置字体和颜色2.文本对齐方式3.富文本显示 显示图片QLabel的交互功能可点击标签 QLabel的高级特性1.缩放图片以适应标签大…...
用Python设置Excel工作表网格线的隐藏与显示
Excel表格界面的直观性很大程度上得益于表格中的网格线设计,这些线条帮助用户精确对齐数据,清晰划分单元格。网格线是Excel界面中默认显示的辅助线,用于辅助定位,与单元格边框不痛,不影响打印输出。然而,在…...
自回归模型胜过扩散模型:用于可扩展图像生成的 Llama
📜 文献卡 Autoregressive Model Beats Diffusion: Llama for Scalable Image Generation作者: Peize Sun; Yi Jiang; Shoufa Chen; Shilong Zhang; Bingyue Peng; Ping Luo; Zehuan YuanDOI: 10.48550/arXiv.2406.06525摘要: We introduce LlamaGen, a new family …...
访问外网的安全保障——反向沙箱
反向沙箱作为一种网络安全技术,其核心理念在于通过构建一个隔离且受控的环境,来有效阻止潜在的网络威胁对真实系统的影响。在当今日益复杂的网络环境中,如何借助反向沙箱实现安全上网,已成为众多用户关注的焦点。 随着信息化的发…...
【绝对有用】C++ 字符串进行排序、vector增加内容 和 剔除值
在 C 中对字符串进行排序,可以使用标准库中的 std::sort 函数。std::sort 函数可以用于容器或范围内的元素排序,包括字符串中的字符。以下是一个简单的示例代码,展示了如何对字符串中的字符进行排序: #include <iostream> …...
GenICam标准(一)
系列文章目录 GenICam标准(一) GenICam标准(二) GenICam标准(三) GenICam标准(四) GenICam标准(五) GenICam标准(六) 文章目录 系列文…...
【Redis】分布式锁基本理论与简单实现
目录 分布式锁解释作用特性实现方式MySQL、Redis、Zookeeper三种方式对比 原理 reids分布式锁原理目的容错redis简单分布式锁实现锁接口实现类下单场景的实现容错场景1解决思路优化代码 容错场景2Lua脚本Redis利用Lua脚本解决多条命令原子性问题 释放锁的业务流程Lua脚本来表示…...
Web开发技术大作业(HTML\CSS\PHP\MYSQL\JS)
从6月13日到6月15日,经过一系列的操作,终于把老师布置的大作业写完了,虽然有很多水分,很多东西都是为了应付(特别是最后做的那几个网页),真的是惨不忍睹,不过既然花时间写了…...
【全开源】沃德会务会议管理系统(FastAdmin+ThinkPHP+Uniapp)
沃德会务会议管理系统一款基于FastAdminThinkPHPUniapp开发的会议管理系统,对会议流程、开支、数量、标准、供应商提供一种标准化的管理方法。以达到量化成本节约,风险缓解和服务质量提升的目的。适用于大型论坛、峰会、学术会议、政府大会、合作伙伴大会…...
尚硅谷大数据技术ClickHouse教程-笔记01【ClickHouse单机安装、数据类型】
视频地址:一套上手ClickHouse-OLAP分析引擎,囊括Prometheus与Grafana_哔哩哔哩_bilibili 01_尚硅谷大数据技术之ClickHouse入门V1.0 尚硅谷大数据技术ClickHouse教程-笔记01【ClickHouse单机安装、数据类型】尚硅谷大数据技术ClickHouse教程-笔记02【表引…...
生产管理系统看板,在自动化设备领域的创新应用
在自动化设备领域,生产管理系统看板的创新应用是一项引人注目的技术进步。以广州某自动化设备有限公司为例,他们是一家涂装工程设备制造企业,将讯鹏生产管理系统电子看板成功应用于全自动立式静电喷粉线、卧式静电喷粉线、氟碳喷涂生产线等领…...
分享一个图片转换工具XnConvert
目录 stablediffusion3 生成图片效果图图片转换工具XnConvertpixzip stablediffusion3 生成图片效果图 今天在使用stablediffusion3时,尝试生成了几张Java的图片,发现确实很好看,文生图的效果超出我的预期,忍不住想要给自己的csd…...
Nginx后端超时504重复请求
在一次业务中客户端请求osb平台再经过nginx转发后端,开发反馈请求次数大于1导致问题,经排查客户端请求一次,osb平台设置超时为30s,nginx配置等待上游服务器响应时最多等待30秒 部分配置文件 upstream xx {server 10.6.6.1:8080 w…...
环境配置04:Pytorch下载安装
说明: 显存大于4G的建议使用GPU版本的pytorch,低于4G建议使用CPU版本pytorch,直接使用命令安装对应版本即可 GPU版本的pytorch的使用需要显卡支持,需要先安装CUDA,即需要完成以下安装 1.查看已安装CUDA版本 GPU对应…...
【杂记-浅谈私有地址】
私有地址 一、私有IP地址概述1、私有IP地址的实用性2、私有IP地址的局限性 二、私有IP地址范围1、A类私有地址2、B类私有地址3、C类私有地址 三、私有IP地址与公网IP地址的区别 一、私有IP地址概述 私有IP地址是互联网工程任务组(IETF)为组织机构内部使…...
Java基础学习-数组
目录 数组定义 注意点: 地址值是数组在内存中实际存储的地址。 案例遍历:遍历数组得到每一个元素,求数组里面所有数据和 案例:定义数组,遍历能被3整除的数字 案例:遍历一个数组,奇数将当前…...
爬虫 pandas Linux Flume Pig填空题
目录 试卷:Python网络数据处理 答案 试卷:Pandas基础操作 答案 试卷:Linux基础指令 答案 试卷:Apache Flume基础指令 答案 试卷:Apache Pig基础指令 答案: Hadoop题 答案 试卷:Pyth…...
Spring框架中哪些地方使用了反射
Spring框架中哪些地方使用了反射? 1. 依赖注入:Spring 使用反射机制获取对象并进行属性注入,从而实现依赖注入。 2. AOP:Spring AOP 使用 JDK 动态代理或者 CGLIB 字节码增强技术来实现 AOP 的切面逻辑,这其中就包含…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
