正则表达式和sed

一、正则表达式

主要用来匹配字符串(命令结果,文本内容)

通配符匹配文件(而且是已存在的文件)

  • 基本正则表达式

  • 扩展正则表达式

1.元字符

.         匹配任意单个字符,可以是一个汉字  
[]        匹配指定范围内的任意单个字符,示例:[zhou]   [0-9]   []   [a-zA-Z]   [[:alpha:]]    [0-9a-zA-Z]= [:alnum:]
[^]       匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z]
[:space:] 包括空格、制表符 (水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广

2.表示次数

*  匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* 任意长度的任意字符  不包括0次     
\? 匹配其前面的字符出现0次或1次,即:可有可无
\+ 匹配其前面的字符出现最少1次,即:肯定有且 >=1\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\}  匹配前面的字符至多n次,<=n
\{n,\}  匹配前面的字符至少n次

注:如果是扩展正则表达式,不需要加转义字符\

例:

请添加图片描述

3.位置锚定

^  行首锚定, 用于模式的最左侧
$  行尾锚定,用于模式的最右侧
^PATTERN$  用于模式匹配整行 (单独一行  只有root)
^$  空行   
^[[:space:]]*$   空白行    tab   换行  回车

\<\b        词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
\>\b        词尾锚定,用于单词模式的右侧
\<PATTERN\>     匹配整个单词

例:

请添加图片描述

4.分组

分组:( ) 将多个字符捆绑在一起,当作一个整体处理,如:(root)+

后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名

方式为: \1, \2, \3, … 分组

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

例:

echo abccc |grep "abc\{3\}"
abccc

echo abcabcabc |grep "\(abc\)\{3\}"
#分组 匹配abc
abcabcabc

ifconfig ens33 |grep netmask|grep -Eo '([0-9]{1,3}.){4}'
192.168.91.100

请添加图片描述
请添加图片描述

二、sed

sed 即 Stream EDitor,和 vi 不同,sed是行编辑器

sed原理

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。

sed基本用法

sed格式

sed [选项]… “sed脚本” [输入文件]…

常用选项
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑[root@www data]#sed -n -e '/^r/p'  -e'/^b/p' /etc/passwd
-f FILE 从指定文件中读取编辑脚本
-r, -E 使用扩展正则表达式
-i.bak 备份文件并原处编辑
sed脚本格式

sed脚本由’地址+命令’组成

1.命令

p:打印,如果是同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用。

d:删除,删除选定的行

a:增加,在当前行下面增加一行指定内容

i:插入,在指定行上面插入一行指定内容

c:替换,将指定的行替换为指定内容(整行替换)

2.地址

1、不给地址,那么就是针对全文处理
2、单地址,表示#,指定的行,$表示最后一行,/pattter/:表示该模式能匹配到的每一行
3、地址范围:
#,# 从第几行到第几行
#,+#从第几行开始,往后加4行
/patter1/,/patter2/ 表示从第一个开始找,到第二个结束

请添加图片描述
请添加图片描述
3、步进:~
1~2:表示奇数行
2~2:表示偶数行
3~3:表示可以3的倍数行
在这里插入图片描述

4.分组后项引用
虽然sed是用来一行一行处理的,但是还是可以利用分组后项引用的办法来提取有相同标志的列

两种方式:①先匹配关键字的前后部分有什么特点,②找到关键字的特点,将整行用正则表达式采用分组表示

sed面试题
1.使用sed的分组后项引用来提取ip地址
sed -rn '2s/.*inet ([0-9.]+) .*/\1/p'
192.168.20.8
2.提取版本号

ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar

cat 11 | sed -rn 's/.*-([0-9.]+).jar/\1/p'

在这里插入图片描述

3.提取文件的权限

将11文件的权限0644提取出来

[root@localhost ~] stat 11
  文件:"11"
  大小:255       	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:34738973    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2024-05-15 15:57:30.809345248 +0800
最近更改:2024-05-15 15:57:01.088115377 +0800
最近改动:2024-05-15 15:57:01.088115377 +0800
创建时间:-
[root@localhost ~] stat 11 | sed -rn 's/.*\(([0-9]+)\/.*/\1/p'
0644

*注:表示(和/原来的意思一定要加上转义字符*

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【企业宣传片】拍摄思维提升,专业影视质感核心揭密,一课搞定

课程下载&#xff1a;【企业宣传片】拍摄-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程介绍 大量案例分析宣传片拍摄的痛点要点 根据案例告诉你解决方案&#xff0c;讲透概念 改变你对企业宣传片的思维层级与认知 归纳总结对比不同案…

基于SSM的婚恋网站的设计与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的婚恋网站的设计与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spri…

MS41908M替代AN41908

产品简述 MS41908M 是一款用于网络摄像机和监控摄像机的镜头 驱动芯片他可完全替代AN41908。 芯片内置光圈控制功能&#xff1b;通过电压驱动方式以及扭矩纹 波修正技术&#xff0c;实现了噪声微步驱动。 主要特点 电压驱动方式&#xff0c;256 微步驱动电路&#xff08;两通道…

多区域OSPF路由配置

一、基础配置 1.搭建实验拓扑图 2.实验编址 具体如何配置可以看这一篇详细的博文&#xff1a;单区域OSPF实验-CSDN博客 3.分别检查六个路由器的配置&#xff1a; 使用命令display ip interface brief R1的配置 其他大家可以调出来&#xff0c;再与实验拓扑图进行比对&#…

机器人非线性系统反馈线性化与解耦

机器人非线性系统的反馈线性化和解耦是控制理论中的两个重要概念&#xff0c;它们分别用于简化系统分析和设计过程&#xff0c;提高控制系统的性能。 首先&#xff0c;反馈线性化是一种将非线性系统转化为线性系统的技术。在机器人控制中&#xff0c;由于机器人本身是一个强耦…

那些年我与c++的叫板(一)--string类自实现

引子&#xff1a;我们学习了c中的string类&#xff0c;那我们能不能像以前数据结构一样自己实现string类呢&#xff1f;以下是cplusplus下的string类&#xff0c;我们参考参考&#xff01; 废话不多说&#xff0c;直接代码实现&#xff1a;&#xff08;注意函数之间的复用&…

【C语言】5.C语言函数(2)

文章目录 7.嵌套调⽤和链式访问7.1 嵌套调⽤7.2 链式访问 8.函数的声明和定义8.1 单个⽂件8.2 多个⽂件8.3 static 和 extern8.3.1 static 修饰局部变量8.3.2 static 修饰全局变量8.3.3 static 修饰函数 7.嵌套调⽤和链式访问 7.1 嵌套调⽤ 嵌套调用就是函数之间的互相调用。…

1、sql server数据库进行sql注入

靶机取自&#xff1a;墨者sql server 1、判断数据库类型 抓包知sql server&#xff0c;所以注入语句跟MySQL有些区别 2、判断注入点 “http://219.153.49.228:42514/new_list.asp?id2 ”&#xff0c;当id2 and 11时显示正确&#xff0c;id2 and 12时页面报错。 3、确定列…

BERT for Joint Intent Classification and Slot Filling 论文阅读

BERT for Joint Intent Classification and Slot Filling 论文阅读 Abstract1 Introduction2 Related work3 Proposed Approach3.1 BERT3.2 Joint Intent Classification and Slot Filling3.3 Conditional Random Field 4 Experiments and Analysis4.1 Data4.2 Training Detail…

【董晓算法】动态规划之背包DP问题(2024.5.11)

前言&#xff1a; 本系列是学习了董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 动态规划系列 【董晓算法】动态规划之线性DP问题-CSDN博客 01背包 步骤&#xff1a; 分析容量j与w[i]的关系&#xff0c;然后分析是否…

FreeRTOS消息队列queue.c文件详解

消息队列的作用 消息队列主要用来传递消息&#xff0c;可以在任务与任务之间、中断与任务之间传递消息。 传递消息是通过复制的形式&#xff0c;发送方发送时需要不断复制&#xff0c;接收方接收时也需要不断复制。虽然会有内存资源的浪费&#xff0c;但是可以保证安全。 假…

为什么descriptor和data分离可以内存高效率

以下为例&#xff0c;需要有前面的6个bytes开始&#xff0c;用来处理数据&#xff0c;一旦这6个bytes有了即可以处理了。 Descriptor和data是同样的&#xff0c;只有descriptor有了&#xff0c;即可以开始处理data了。所以data不需要停留更长时间。

函数递归练习

目录 1.分析下面选择题 2.实现求第n个斐波那契数 3.编写一个函数实现n的k次方&#xff0c;使用递归实现。 4.写一个递归函数DigitSum(n)&#xff0c;输入一个非负整数&#xff0c;返回组成它的数字之和 5.递归方式实现打印一个整数的每一位 6.实现求n的阶乘 1.分析下面选择…

vs2022中添加头文件和声明

总结帖 数组存储 matlab中3维数组–>C中1维数组 数组转置函数 #include <stdio.h>// 转置二维数组 void transpose(int *src, int *dest, int rows, int cols) {for (int i 0; i < rows; i) {for (int j 0; j < cols; j) {dest[j * rows i] src[i * col…

解析C++ 网络输入输出缓冲区Buffer类的设计与实现(muduo库)

网络输入输出缓冲区&#xff08;Buffer&#xff09;是为了优化网络通信性能而设计的。通过将数据存储在缓冲区中&#xff0c;可以减少对网络的频繁访问&#xff0c;提高数据传输效率。缓冲区还可以帮助处理数据流中的突发性和短时延&#xff0c;使得数据的发送和接收更加稳定和…

最新版Ceph( Reef版本)块存储简单对接k8s(上集)

当前ceph 你的ceph集群上执行 1.创建名为k8s-rbd 的存储池 ceph osd pool create k8s-rbd 64 642.初始化 rbd pool init k8s-rbd3 创建k8s访问块设备的认证用户 ceph auth get-or-create client.kubernetes mon profile rbd osd profile rbd poolk8s-rbd部署 ceph-rbd-csi c…

C++map容器关联式容器

Cmap 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器&#xff0c;其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身&#xff0c;这样的容器被统称为序列式容器。而map、set是一种关联式容器&#xff0c;关联式容器也是用来存储数据的&#xff0…

专“蜀”盛会!CGT Asia 2024 第六届亚洲细胞与基因治疗创新峰会(成都站)7月火热相邀

在细胞与基因治疗领域&#xff0c;我们正站在一个科技革命的风口上。中国的CGT市场预计将持续快速增长。根据相关分析&#xff0c;预计到2025年整体市场规模将达到25.9亿美元&#xff0c;显示出276%的复合年增长率。这一增长趋势预计将持续到2030年&#xff0c;细胞与基因治疗领…

【利用数组处理批量数据-谭浩强配套】(适合专升本、考研)

无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 完整资料如下&#xff1a;纯干货、纯干货、纯干货&#xff01;&#xff01;…

电子邮箱是什么?付费电子邮箱和免费电子邮箱有什么区别?

注册电子邮箱前&#xff0c;有付费电子邮箱和免费电子邮箱两类选择。付费的电子邮箱和免费的电子邮箱有什么区别呢&#xff1f;区别主要在于存储空间、功能丰富度和售后服务等方面&#xff0c;本文将为您详细介绍。 一、电子邮箱是什么&#xff1f; 电子邮箱就是线上的邮局&a…