35、正则表达式

news2024/12/28 18:33:14

一、正则表达式命令

正则表达式:匹配的是文本内容,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.txt

123
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.txt





111
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.txt





111
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
345
 345
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
sds
 123
345
345
 345
567
987

-r 反向排序

[root@test1 opt]# sort -r 123.txt
sds
sdfd
SD
bfvf
BD
bbb
bbb
aaa
987
567
 345
345
345
 123
	

-u 相同的数据只显示一行

[root@test1 opt]# sort -u 123.txt

	
 123
345
 345
567
987
aaa
bbb
BD
bfvf
SD
sdfd
sds

-o 把排序后结果转存到指定的文件

[root@test1 opt]# sort -u 123.txt


 123
345
 345
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
567
 345
345
345
 123
sds
sdfd
SD
bfvf
BD
bbb
bbb
aaa

1.3、uniq 去重

uniq 去除连续重复的行,只显示一行

-c 统计连续行的次数,合并连续重复的行

[root@test1 opt]# uniq -c 123.txt
      1  345
      1 567
      1 987
      1  123
      2 345
      1 bbb
      1 bfvf
      2 
      1 sdfd
      1 SD
      1 BD
      2 
      1 	
      1 sds
      2 aaa
      1 bbb

-u 显示仅出现一次的行(包括不适合连续出现的重复行)

[root@test1 opt]# uniq -u 123.txt
 345
567
987
 123
bbb
bfvf
sdfd
SD
BD
	
sds
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 -c
      2 ESTAB
     15 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 ".?[:]+.?"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Swift Combine — zip和combineLatest的理解与使用

Publisher 上还有一些其他的操作&#xff0c;比如 zip 和 combineLatest&#xff0c;能让我们在时序上对控制多个 Publisher 的结果进行类似 and 和 or 的合并&#xff0c;它们在构建复杂 Publisher 逻辑时也十分有用。 zip Publisher 中的 zip 和 Sequence 的 zip 相类似&am…

VERYCLOUD睿鸿股份亮相亚马逊云科技中国峰会2024

5月30日&#xff0c;为期两天的亚马逊云科技中国峰会在上海世博中心圆满落幕。 多位大咖现场分享&#xff0c;生成式AI时代的数据战略&#xff0c;企业级AI应用&#xff0c;最新技术、产品重磅发布&#xff0c;创新行业解决方案 …… 作为亚马逊云科技的生态合作伙伴&#x…

Docker:认识Docker Host/Container/none网络

文章目录 Docker Host网络认识Docker Host网络实际操作网络模式区别使用场景 Docker Container网络认识Docker Container网络操作实例使用场景 Docker None网络使用场景 Docker Host网络 认识Docker Host网络 Docker容器运行默认会分配独立的Network Namespace隔离子系统&…

计算机网络 交换机的安全配置

一、理论知识 1.交换机端口安全功能介绍 交换机端口安全功能是针对交换机端口进行安全属性的配置&#xff0c;以控制用户的安全接入。主要包括以下两种配置项&#xff1a; ①限制交换机端口的最大连接数&#xff1a;控制交换机端口连接的主机数量&#xff1b;防止用户进行恶…

微信小程序笔记 四!

协同工作和发布 - 协同工作 1. 了解权限管理需求 在中大型的公司里&#xff0c;人员的分工非常仔细&#xff1a;同一个小程序项目&#xff0c;一般会有不同岗位、不同角色的员工同时参与设计与开发。 此时出于管理需要&#xff0c;我们迫切需要对不同岗位、不同角色的员工的…

游戏录屏软件,游戏录屏,3款软件推荐

“最近迷上了电脑游戏&#xff0c;想把自己在游戏中的精彩瞬间给记录下来。看到网上其他人录制的游戏都十分高清且有趣。想问问大家都是用什么软件进行游戏录屏的&#xff1f;有推荐的软件吗&#xff1f;” 在游戏生活中&#xff0c;相信你也一定想要记录下和队友在游戏中的欢…

应用篇| 深入浅出LLM应用之RAG

相信很多人都使用过LLM大模型&#xff0c;但是现有大模型或多或少都有以下问题&#xff1a; LLM幻觉问题&#xff1a;从《【小白入门篇1】GPT到底是怎样练成&#xff1f;》我们知道虽然大模型现在能力很强,但是本质就是在做文字接龙,而且每次接龙都具有随机性, 导致模型有时候…

工商业光伏项目怎么做?

随着全球对可再生能源的关注度不断提高&#xff0c;工商业光伏项目已成为企业实现绿色转型、降低能耗成本的重要途径。本文将详细介绍工商业光伏项目的开发流程&#xff0c;以及项目实施过程中需要注意的关键点。 一、项目前期准备 在启动工商业光伏项目之前&#xff0c;首先要…

windows下的 GammaRay安装和使用教程

GammaRay功能&#xff1a; 可用于查看运行时的程序对象状态信息以及事件队列 安装步骤&#xff1a; 1.官网下载地址&#xff1a; GammaRay下载地址 下载对应的qt版本适配版本 2.解压包gammaray-2.11.2.zip 解压后新建一个build目录为接下来的编译做准备 3.打开Install.txt 看…

【自组网数据链电台】测试软件

版本1 版本2 版本3 版本4 版本5 版本6 版本7

苹果cms10影视网整站源码下载/苹果cms模板MXone Pro自适应影视电影网站模板

下载地址&#xff1a;苹果cms10影视网整站源码下载/苹果cms模板MXone Pro自适应影视电影网站模板 模板带有夜间模式、白天晚上自动切换&#xff0c;有观影记录、后台设置页。全新UI全新框架&#xff0c;加载响应速度更快&#xff0c;seo更好&#xff0c;去除多余页面优化代码。…

双向滑动选择器

插件地址:https://ext.dcloud.net.cn/plugin?id3940 注意: 当改变值是,让滑块自动滑动需要调用: this.$refs.powerSlider.updateValue(that.tempPowerValue[0], that.tempPowerValue[1], false); <view style"width: 90%;margin: 15px"><cj-slider ref…

基坑监测的内容及其重要性概述

随着城市建设的不断深入&#xff0c;基坑工程作为基础建设的重要组成部分&#xff0c;其安全性和稳定性成为了关注的重点。为了确保基坑施工过程中的安全&#xff0c;基坑监测显得尤为重要。本文将围绕基坑监测的内容展开&#xff0c;旨在帮助读者更好地理解其重要性及实施方法…

RK3568技术笔记十五 固件烧写

安装驱动 解压DriverAssitant_v5.11.zip压缩包后&#xff0c;在DriverAssitant_v5.11文件夹中找到DriverInstall.exe文件&#xff0c;双击打开DriverInstall.exe。如下图所示&#xff1a; 点击驱动安装&#xff0c;等待驱动安装完成&#xff0c;弹出如下所示对话框&#xff0c;…

巧用newSingleThreadExecutor让异步任务顺序跑

背景 Flume 是 Cloudera 提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统 。一个用来控制 Flume 采集任务的 Web 应用&#xff0c;需要对任务进行管理&#xff0c;主要操作「启动、停止、新建、编辑、删除」&#xff0c;本质就是对…

【2024.6.21】今日科技时事:科技前沿大事件

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

RuoYi Swagger请求401

问题描述&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 使用ruoyi-vue分离版&#xff0c;访问swagger&#xff0c;发现接口都调用失败&#xff1a;401 解决方案&#xff1a; 最终解决问题如下步骤&#xff1a; 1、 调用swagger中的接口&#xff0c;报错&a…

氢氧化铝佐剂,完美替代进口品牌明矾佐剂

氢氧化铝佐剂 氢氧化铝佐剂是使用历史最为悠久的疫苗佐剂&#xff0c;已有近百年历史&#xff0c;广泛用于各种人用疫苗和兽用疫苗。氢氧化铝佐剂能够极大地促进体液免疫&#xff08;抗体&#xff09;反应和TH2类细胞免疫反应。 用途 1、免疫各种实验动物制备多克隆或单克隆抗…

CSS阴影优化气泡框样式

<body> <div class"pop">气泡框</div> </body>body{display: flex;justify-content: center;align-items: center;height: 100% } .pop{display: flex;justify-content: center;align-items: center;background: #409eff;width: 150px;heigh…

什么是OAuth2分布式授权协议?

今天我将和大家一起探讨在系统安全领域非常常见的一种授权协议&#xff0c;这就是OAuth2协议&#xff0c;这个协议通常用于对请求访问进行安全控制。在引入这个协议之前&#xff0c;让我们先来回顾两个基本概念&#xff0c;一个是认证&#xff0c;一个是授权。这两个概念比较容…