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 ".?[:]+.?"

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

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

相关文章

私有化地图离线部署方案之查询定位服务

私有化地图离线部署整体解决方案&#xff0c;除硬件之外&#xff0c;一般主要由基础地图服务、查询定位服务、路径规划服务和高程检索服务构成。 其中&#xff0c;查询定位服务是指地理编码与逆地理编码服务。 在《私有化地图离线部署方案之基础地图服务》一文中&#xff0c;…

软考 系统架构设计师系列知识点之杂项集萃(48)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;47&#xff09; 第75题 假设系统中互斥资源R的可用数位25。T0时刻进程P1、P2、P3、P4对资源R的最大需求数、已分配资源数和尚需资源数的情况如表a所示&#xff0c;若P1和P3分别申请资源R数为1和2…

不懂电路搭建可以学嵌入式编程开发吗?

当然可以学嵌入式编程开发&#xff01;虽然电路搭建是嵌入式开发中的一部分&#xff0c;但即使你对电路搭建不太了解&#xff0c;也可以从嵌入式编程开发入手。刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0…

Vue3 子组件监听父组件传来异步数据的正确方式

最初想使用watch 配合着 computed 来监听父组件数据&#xff0c;发现没有必要反而造成代码冗余&#xff0c;如果参数一多很难维护。 正确方式&#xff1a;直接使用computed监听就好 // 子组件 <script> export default {props: {yesterDayfollow: {type: Array},transpo…

公司自己的Qt打包步骤:

公司自己的打包步骤&#xff1a; 1. 把编译完的NRECS复制到 NRECS文件下下 2. NRECS文件夹下 运行 linuxdeployqt NRECS -appimage 3. 第2步如果出现问题&#xff0c;运行下面三行 export LIB_PATH/opt/Qt5.15/5.15.2/gcc_64/lib:$LIB_PATH export PLUGIN_PATH/opt/Qt5.15/5…

【Kafka 面试题】分布式通讯之Kafka面试题汇总(基础+进阶+高阶)-01

【Kafka 面试题】分布式通讯之Kafka面试题汇总 1. Kafka 的用途有哪些&#xff1f;使用场景如何&#xff1f;1.1 用途1.2 使用场景 2. Kafka 中的 ISR、AR 又代表什么&#xff1f;ISR 的伸缩又指什么&#xff1f;2.1 ISR (In-Sync Replicas)2.2 AR (Assigned Replicas)2.3 ISR的…

湘潭大学信息与网络安全考试总结

文章目录 题型内容&#xff08;试题回忆版&#xff09;填空单选多选简答大题 我的感受 题型 填空 20分&#xff0c;一空一分 单选 有几个&#xff0c;两分一个 多选 也有几个&#xff0c;两分一个&#xff0c;不确定的题建议当单选做 简答题 6 分一个&#xff0c;有几个 大题 …

Java中线程池的创建方式有几种?

在Java中&#xff0c;线程池是一种用于管理多个线程的机制&#xff0c;旨在提高性能并简化多线程编程。Java提供了多种方式来创建和管理线程池&#xff0c;主要通过java.util.concurrent包中的ExecutorService接口和Executors类来实现。以下是几种常见的线程池创建方式&#xf…

宝塔面板部署前端项目

部署前端项目 1 打包自己的项目2 登录宝塔面板3 添加站点4 设置域名5 进入当前站点对应的文件目录中6 上传打包后的文件7 访问网站 1 打包自己的项目 2 登录宝塔面板 点击左侧“网站”菜单进入对应页面 点击“添加站点” 3 添加站点 填写域名&#xff0c;如果没有域名的&am…

集成openfeign

集成feign有两种方式. 1.集成到所需项目中(只有该项目可以用)直接引用所需调用的项目 2.集成到公共项目(通用) 1.集成到所需项目中(只有该项目可以用) 再需要消费的服务 进行依赖的引用 1.引入依赖,openfeign,和所需调用的服务 <!--feign--><dependency><gro…

超详细!ArcGIS常用功能快捷键汇总,提高你的工作效率

以下列出了一些在 ArcMap 中可用的键盘快捷键&#xff0c;其中许多也可以应用在 ArcGlobe 和 ArcScene 中。另外&#xff0c;在 ArcMap 中编辑和处理表时&#xff0c;还存在一些可用的键盘快捷键。 您也可以为某个命令指定自己的快捷键。 在 ArcMap 中执行操作时&#xff0c;…

代码随想录算法训练营day65 | 99. 岛屿数量 深搜、99. 岛屿数量 广搜、100. 岛屿的最大面积

本次题目都是卡码网上的 99. 岛屿数量 深搜 dirs [(1, 0), (0, 1), (-1, 0), (0, -1)]def dfs(grid, visited, x, y):for i in range(4):nextx x dirs[i][0]nexty y dirs[i][1]# 越界了&#xff0c;直接跳过if nextx < 0 or nextx > len(grid) or nexty < 0 or…

FCM(Framework Compatibility Matrix)

FCM&#xff08;Framework Compatibility Matrix&#xff09;是Android Open Source Project&#xff08;AOSP&#xff09;中的一个关键组件&#xff0c;用于定义和描述Android框架与设备之间的兼容性关系。以下是关于FCM的详细回答&#xff1a; 定义和目的&#xff1a; FCM是…

【研究】AI大模型需要什么样的硬件?

关注AI大模型 x 硬件的两条思路 从22年11月OpenAI推出ChatGPT至今&#xff0c;我们看到Chatbot应用的能力不断增强&#xff0c;从最初的文字问答&#xff0c;迅速向具有自主记忆、推理、规划和执行的全自动能力的AI Agent发展。我们认为端侧智能是大模型发展的重要分支。建议投…

Open WebUI升级到最新版本

背景介绍 open-webui是一个用于构建Web用户界面的开源库&#xff0c;它仿照 ChatGPT 的图形化界面&#xff0c;可以非常方便的调试、调用本地大语言模型。 目前该开源库更新较为活跃&#xff0c;从3个月前的版本&#xff08;v0.1.108&#xff09;到截止到2024年6月中旬发布的…

牛皮!手写一个 RPC 框架

设计一个RPC&#xff08;远程过程调用&#xff09;框架是一个复杂的过程&#xff0c;涉及到网络通信、序列化与反序列化、服务发现、负载均衡、容错机制等多个方面。以下是设计RPC框架的一些基本步骤&#xff1a; 1. 需求分析&#xff1a; 确定RPC框架需要支持的特性&#xf…

软件测试:实验二 白盒测试技术

一、实验目的 掌握静态白盒测试的技术和原理。掌握逻辑覆盖测试的方法和原理。掌握基本路径测试的方法和原理。 二、实验要求 掌握静态白盒测试的技术和原理。按照实验题目要求&#xff0c;完成指定程序的白盒测试。 三、实验内容与步骤 1、逻辑覆盖测试。请编写测试用例指…

2024年春季学期《算法分析与设计》考前热身练习(历年真题)[纯C语言+思路]

A: 递归求解 题目描述 请使用递归编写一个程序求如下表达式的计算结果&#xff1a; S(1) 1/2 S(2) 1/2 1/6 S(3) 1/2 1/6 1/12 S(4) 1/2 1/6 1/12 1/20 ...... S(n) 1/2 1/6 1/12 1/20 1/30 ...... 输入n (1<n<1000)&#xff0c;输出表达式S(n)的值&…

Oracle CPU使用率过高问题处理

1.下载Process Explorer 2.打开Process Explorer&#xff0c;查看CPU使用情况最高的进程 3.双击该进程&#xff0c;查看详情 \ 4. 获取cpu使用最好的线程tid 5. 查询sql_id select sql_id from v$session where paddr in( select addr from v$process where spid in(1…

电脑开机后出现Aptio Setup Utility 处理方法

电脑开机后出现Aptio Setup Utility怎么处理 Aptio Setup Utility界面的原因&#xff1a; 这是由于 bios设置与真实的硬件情况不匹配硬盘故障找不到可启动的硬盘情况 我的问题是找不到可启动的硬盘情况 解决方式如下&#xff1a; 进入如下界面了&#xff0c;选择Boot选项…