Linux-正则三剑客

目录

一、正则简介

1.正则表达式分两类:

2.正则表达式的意义

二、Linux三剑客简介

1.文本处理工具,均支持正则表达式引擎

2.正则表达式分类

3.基本正则表达式BRE集合

4.扩展正则表达式ere集合

三、grep

1.简介

2.实践

3.贪婪匹配

四、sed

1.sed简介

2.输出文件的第2,3行的内容

5.替换

6.写入对应行

7.实例

五、awk

1.awk基础

2.举例

3.NF和NR

4.字符串占位

5.awk参数

6.awk变量

7.awk的分隔符

8.awk的变量


一、正则简介

1.正则表达式分两类:

基本正则表达式:BRE

扩展正则表达式:ERE

2.正则表达式的意义

  • 处理大量字符串
  • 处理文本

通过特殊符号的辅助,可以让linux管理员快速过滤、替换、处理所需要的字符串、文本,让工作高效。

通常Linux运维工作,都是面临大量带有字符串的内容,如:

  • 配置文件
  • 程序代码
  • 命令输出结果
  • 日志文件

正则表达式应用广泛,Linux仅受三剑客(sed、awk、grep)支持,其他命令无法使用

通配符是大部分普通命令都支持的,用于查找文件或者目录,而正则表达式 是通过三剑客命令在文件(数据流)中过滤内容。


二、Linux三剑客简介

1.文本处理工具,均支持正则表达式引擎

  • grep:文本过滤工具,(模式:pattern)工具
  • sed:stream editor,流编辑器:文本编辑工具
  • awk:Linux的文本报告生成器(格式化文本),Linux上是gawk

2.正则表达式分类

Linux三剑客主要分两类

  • 基本正则表达式(BRE)

BRE对应元字符有^$.[]*

  • 扩展正则表达式(ERE)

ERE在BRE基础上,增加上 (){}?+|等字符

3.基本正则表达式BRE集合

  • 匹配字符
  • 匹配次数
  • 位置锚定

4.扩展正则表达式ere集合

扩展正则表达式必使用grep -E才能生效


三、grep

1.简介

作用:文本搜索工具,格局用户指定的"模式(过滤条件)"对目标文本逐行进行匹配检查,打印匹配到的行

模式:有正则表达式的元字符及文本字符所编写出的过滤条件;

语法:

2.实践

cat /etc/passwd > ./passwd.txt grep -i "root" passwd.txt

反选

grep -i "root" passwd.txt -v -c 
root@ou-virtual-machine:~# grep -i "root" passwd.txt -v

找空行

grep '^$' passwd.txt -n

过滤注释行

grep '^#' passwd.txt -v -n

或者

grep '^[a-zA-Z]' passwd.txt -n

匹配w+前一个任意字符,或者w+后一个任意字符

grep 'w.' passwd.txt 
grep '.w' passwd.txt

3.贪婪匹配

grep ".*e" passwd.txt

+号匹配1次或者多次

grep -E "w+" passwd.txt -n

复合实例


四、sed

1.sed简介

sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。

sed是操作、过滤和转换 文本内容的强大工具。

常用功能包括结合正则表达式对文件实现快速增删改查,其中穿功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。

由于sed还会输出没匹配到的字符行,我们需要-n来处理

常用参数

sed的内置命令字符用于文件进行不同的操作功能,如对文件增删改查

sed常用内置命令字符:

sed匹配范围

2.输出文件的第2,3行的内容

p为打印的意思

sed -n '2,3p' passwd.txt

如果不加-n那么不匹配的也会输出

3.匹配root字符串

sed -n '/root/p' passwd.txt

4.删除的问题

sed '/root/d' passwd.txt

但是查看文件却发现root字符串所在的行还在文件内

这里是因为sed删除的 是内存中的内容,并没有真正对文件内容进行操作。

写入文件加-i

5.替换

sed "s/www/nihaoshijie/g" passwd.txt.bak

但文件内容还是没用修改

-i参数写入文件内

sed "s/www/nihaoshijie/g" passwd.txt.bak -i

多次替换

sed -e "s/nihaoshijie/www/g" -e "s/test/wwwwwwwwwwwwwwwwwwwwww/g" passwd.txt.bak -i

6.写入对应行

sed "2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" passwd.txt.bak -i

每行都加个分隔符

sed "a ----------------------------------------------------" passwd.txt.bak -i

7.实例

拿出ip和子网掩码和广播地址

ifconfig ens33 | sed "2p" -n | sed "s/^.*inet//"


五、awk

awk更像一门编程语言,支持条件判断、数组、循环等功能

三剑客的各个特点

  • grep,擅长单纯的查找或匹配文本内容
  • awk,更适合编辑、处理匹配到的文本内容
  • sed,更适合格式化文本内容,对文本进行复杂处理

三个命令称之为Linux的三剑客

1.awk基础

awk语法:

awk [option] 'pattern[action]' file...

awk 参数 '条件动作' 文件

2.举例

空格作为分隔符

$0 代表一整行

$1 代表第一列

$2 代表第二列

...

awk '{print $1}' 1.txt

3.NF和NR

awk '{print $NF}' 1.txt 
awk '{print $NR}' 1.txt

NR显示文件第五行

awk 'NR==5' 1.txt

NR显示文件第二行到第五行

root@ou-virtual-machine:~# awk 'NR==2,NR==5' 1.txt 
a6 a7 a8 a9 a10
a11 a12 a13 a14 a15
a16 a17 a18 a19 a20
a21 a22 a23 a24 a25

4.字符串占位

输出默认不带分隔符

root@ou-virtual-machine:~# awk '{print $1 $2 $3}' 1.txt 
a1a2a3
a6a7a8
a11a12a13
a16a17a18
a21a22a23root@ou-virtual-machine:~# awk '{print $1__$2__$3}' 1.txt 
a1a2a3
a6a7a8
a11a12a13
a16a17a18
a21a22a23

逗号会默认加空格分隔符

root@ou-virtual-machine:~# awk '{print $1,$2,$3}' 1.txt 
a1 a2 a3
a6 a7 a8
a11 a12 a13
a16 a17 a18
a21 a22 a23

"字符串"分隔符

root@ou-virtual-machine:~# awk '{print "1 List: "$1,"2 List: "$2,"3 List: "$3}' 1.txt 
1 List: a1 2 List: a2 3 List: a3
1 List: a6 2 List: a7 3 List: a8
1 List: a11 2 List: a12 3 List: a13
1 List: a16 2 List: a17 3 List: a18
1 List: a21 2 List: a22 3 List: a23
1 List:  2 List:  3 List: 

5.awk参数

前面的文件分隔符是空格,awk自动识别空格作为分隔符

但是如果我们用其他的分割符,那么awk并不会自动识别

root@ou-virtual-machine:~# cat 1.txt
a1 a2 a3 a4 a5
a6 a7 a8 a9 a10
a11 a12 a13 a14 a15
a16 a17 a18 a19 a20
a21 a22 a23 a24 a25root@ou-virtual-machine:~# cat 1.txt.bak 
a1#a2#a3#a4#a5
a6#a7#a8#a9#a10
a11#a12#a13#a14#a15
a16#a17#a18#a19#a20
a21#a22#a23#a24#a25root@ou-virtual-machine:~# awk "{print $1}" 1.txt.bak 
a1#a2#a3#a4#a5
a6#a7#a8#a9#a10
a11#a12#a13#a14#a15
a16#a17#a18#a19#a20
a21#a22#a23#a24#a25

通过-F来修改识别分隔符

cat 1.txt.bak | awk -F"#" '{print $1}'

小写f

root@ou-virtual-machine:~# echo '"{print}"' > 1
root@ou-virtual-machine:~# awk -f 1 1.txt 
a1 a2 a3 a4 a5
a6 a7 a8 a9 a10
a11 a12 a13 a14 a15
a16 a17 a18 a19 a20
a21 a22 a23 a24 a25

6.awk变量

取出本机的ip

第一步先取出ifconfig第二行的数据

ifconfig | awk 'NR==2{print $0}'

ifconfig | awk 'NR==2{print $0}' | awk '{print $2}'

7.awk的分隔符

  • 输入分隔符,awk默认是空格,空白字符,变量名是FS
  • 输出分隔符,OFS

FS输入分隔符

awk逐行处理文本的时候,以输入分隔符为准,把文本切成多个片段,默认符号是空格

当我们处理特殊文件,没用空格的时候,可以自由指定分隔符

awk -F '#' '{print $1}' 1.txt.bak

修改默认输出符

root@ou-virtual-machine:~# awk -F '#'  '{print $1,$2,$4}' 1.txt.bak 
a1 a2 a4
a6 a7 a9
a11 a12 a14
a16 a17 a19
a21 a22 a24  
root@ou-virtual-machine:~# awk -F '#' -v OFS=': ' '{print $1,$2,$4}' 1.txt.bak 
a1: a2: a4
a6: a7: a9
a11: a12: a14
a16: a17: a19
a21: a22: a24
: : 
root@ou-virtual-machine:~# 

8.awk的变量

NR、NF和FNR变量

[root@localhost ~]# awk -F "#" '{print NR,NF,$1,$2}' 1
1 5 a1 a2
2 5 a6 a7
3 5 a11 a12
4 5 a16 a17
5 5 a21 a22

NR和FNR的区别

[root@localhost ~]# awk -F "#" '{print FNR,$1,$2}' 1 1
1 a1 a2
2 a6 a7
3 a11 a12
4 a16 a17
5 a21 a22
1 a1 a2
2 a6 a7
3 a11 a12
4 a16 a17
5 a21 a22
[root@localhost ~]# awk -F "#" '{print NR,$1,$2}' 1 1
1 a1 a2
2 a6 a7
3 a11 a12
4 a16 a17
5 a21 a22
6 a1 a2
7 a6 a7
8 a11 a12
9 a16 a17
10 a21 a22

ORS和RS

[root@localhost ~]# awk -F "#" '{print RS="-------",$1,$2}' 1 
------- a1 a2
------- a6 a7
[root@localhost ~]# awk -F "#" '{print ORS="-------",$1,$2}' 1 
------- a1 a2-------------- a6 a7-------------- a11 a12-------------- a16 a17-------------- a21 a22-------[
[root@localhost ~]# 

FILENAME

数组

默认数组

[root@localhost ~]# awk "{print ARGV[0],$0}" 1
awk 0
awk 0
awk 0
awk 0
awk 0
[root@localhost ~]# awk "{print ARGV[1]}" 1
1
1
1
1
1
[root@localhost ~]# awk "{print ARGV[2]}" 1
[root@localhost ~]# awk '{print ARGV[0],ARGV[1],ARGV[2]}' 1 1
awk 1 1
awk 1 1
awk 1 1
awk 1 1
awk 1 1
awk 1 1
awk 1 1
awk 1 1
awk 1 1
awk 1 1
[root@localhost ~]# 

自定义变量

[root@localhost ~]# awk -v myname='o' 'BEGIN{print "myname=",myname}'
myname= o
[root@localhost ~]# 

9.awk格式化输出

print和printf的区别

printf需要自定义格式

awk '{printf $0}' 1
a1#a2#a3#a4#a5a6#a7#a8#a9#a10a11#a12#a13#a14#a15a16#a17#a18#a19#a20a21#a22#a23#a24#a25[root@localhost ~]# 
[root@localhost ~]# 

自定义格式

[root@localhost ~]# printf "%s\n" a b c d e
a
b
c
d
e
[root@localhost ~]# awk 'BEGIN{printf "%s\n%s\n",1,2,3,4,5}'
1
2

区别

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

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

相关文章

STM32Cubemx新建F429基础工程

配置STM32CubeMX 配置KEY 配置USART1 配置RCC Project Manager Toolchain 选择 MDK-ARM Code Generator 配置如下 GENERATE CODE 即可 配置Keil5 魔术棒配置 – Target – 勾选 Use MicroLIB – Debug – Flash Download – 勾选Reset and Run 基础代码 /* Private incl…

GD32F103x IIC通信

1. IIC通信 1.IIC的介绍 IIC总线有两条串行线,其一是时钟线SCK(同步),其二是数据线SDA。只有一条数据线属于半双工。应用中,单片机常常作为主机,外围器件可以挂载多个。(当然主机也可以有多个。…

AJAX--Express速成

一、基本概念 1、AJAX(Asynchronous JavaScript And XML),即为异步的JavaScript 和 XML。 2、异步的JavaScript 它可以异步地向服务器发送请求,在等待响应的过程中,不会阻塞当前页面。浏览器可以做自己的事情。直到成功获取响应后&#xf…

【Spring MVC】MVC如何浏览器请求(service方法)

文章目录 1. DispatcherServlet 的 service 方法1.1. processRequest 方法1.2. doService 方法 背景:平时我们学习 MVC 重点关注的时DispatcherServlet 的 doDispatcher 方法,但是在 doDispatcher 方法之前 还有请求处理的前置过程,这个过程…

vue 使用 创建二维数组响应数据 渲染 echarts图标

目前我遇到的情况就是用动态的二维数组数据渲染echarts图标,我们从后端收到的接口一般是个一维数组,需要手动构建并且保证响应式。接下来我做了个案例 一、案例总逻辑 1. 先创建一个vue项目 2. 添加 echarts依赖 3. 模拟数据请求,构建二维数组…

Axios post请求出现500错误

笔者在编写前端form表单传后端数据的时候,出现了以下问题 一、问题场景 当我用axios发送post请求的时候,出现了500错误 笔者找了很长时间错误,代码没问题,后端接口也没问题,后来发现问题出在实体类上了 当前端post请…

数据结构: 数组与链表

目录 1 数组 1.1 数组常用操作 1. 初始化数组 2. 访问元素 3. 插入元素 4. 删除元素 5. 遍历数组 6. 查找元素 7. 扩容数组 1.2 数组优点与局限性 1.3 数组典型应用 2 链表 2.1 链表常用操作 1. 初始化链表 2. 插入节点 3. 删除…

10.03

代码 #include <iostream>using namespace std; class cz { private:int num1; //实部int num2; //虚部 public:cz(){}cz(int a,int b):num1(a),num2(b){}cz(const cz &other):num1(other.num1),num2(other.num2){}~cz(){}const cz operator(const cz &othe…

websocket逆向【python实现http/https拦截】

python实现http拦截 前言:为什么要使用http拦截一、技术调研二、技术选择三、使用方法前言:为什么要使用http拦截 大多数爬虫玩家会直接选择API请求数据,但是有的网站需要解决扫码登录、Cookie校验、数字签名等,这种方法实现时间长,难度高。需求里面不需要高并发,有没有…

5月22日比特币披萨日,今天你吃披萨了吗?

比特币披萨日 1. Laszlo Hanyecz2. 最贵披萨诞生记3. 梭哈买披萨4. 未完待续 2010年5月22日&#xff0c;美国佛罗里达州的程序员Laszlo Hanyecz&#xff08;拉兹洛哈涅克斯&#xff09;用10000个比特币购买了棒约翰&#xff08;Papa Johns&#xff09;比萨店一个价值25美元的奶…

C语言:选择+编程(每日一练Day9)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;自除数 思路一&#xff1a; 题二&#xff1a;除自身以外数组的乘积 思路二&#xff1a; 本人实力有限可能对…

C++核心编程--继承篇

4.6、继承 继承是面向对象三大特征之一 有些类与类之间存在特殊的关系&#xff0c;例如下图中&#xff1a; ​ 我们发现&#xff0c;定义这些类的定义时&#xff0c;都拥有上一级的一些共性&#xff0c;还有一些自己的特性。那么我们遇到重复的东西时&#xff0c;就可以考虑使…

OpenCV读取图像时按照BGR的顺序HWC排列,PyTorch按照RGB的顺序CHW排列

OpenCV读取RGB图像 在OpenCV中&#xff0c;读取的图片默认是HWC格式&#xff0c;即按照高度、宽度和通道数的顺序排列图像尺寸的格式。我们看最后一个维度是C&#xff0c;因此最小颗粒度是C。 例如&#xff0c;一张形状为2562563的RGB图像&#xff0c;在OpenCV中读取后的格式…

R | R及Rstudio安装、运行环境变量及RStudio配置

R | R及Rstudio安装、运行环境变量及RStudio配置 一、介绍1.1 R介绍1.2 RStudio介绍 二、R安装2.1 演示电脑系统2.2 R下载2.3 R安装2.4 R语言运行环境设置&#xff08;环境变量&#xff09;2.4.1 目的2.4.2 R-CMD测试2.4.3 设置环境变量 2.5 R安装测试 三、RStudio安装3.1 RStu…

【pwn入门】用gdb实现第1个pwn

声明 本文是B站你想有多PWN学习的笔记&#xff0c;包含一些视频外的扩展知识。 有问题的源码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> char sh[]"/bin/sh"; int func(char *cmd){system(cmd);return 0; }int main(){char …

【操作系统】进程同步与进程互斥

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 进程同步与进程互斥 一、什么是进程同步二、…

redis中list类型的操作

一、特点 Redis列表是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加一个元素到列表的头部&#xff08;左边&#xff09;或者尾部&#xff08;右边&#xff09;。一个列表最多可以包含 2^32 - 1 个元素 (超过40亿个元素)。 list其底层使用quicklist存储数据 qu…

力扣-383.赎金信

Idea 使用一个hashmap 或者一个int数组存储第二次字符串中每一个字符及其出现的次数 遍历第一个字符串&#xff0c;讲出现的重复字符减1&#xff0c;若该字符次数已经为0&#xff0c;则返回false AC Code class Solution { public:bool canConstruct(string ransomNote, strin…

色彩一致性自动处理方法在遥感图像中的应用

前言 在获取卫星遥感影像时&#xff0c;由于受不均匀的光照、不同的大气条件和不同的传感器设备等因素的影响&#xff0c;遥感影像中会存在局部亮度和色彩分布不均匀的现象&#xff0c;下面是在BigMap地图下载器中收集的几幅谷歌卫星影像&#xff0c;像下面这种都是拼接好的影像…

S32K144 GPIO编程

前面的文章介绍了如何在MDK-Keil下面进行S32K144的开发&#xff0c;下面就使用该工程模板进行GPIO LED的编程试验。 1. 开发环境 S32K144EVB-Q100开发板MDK-Keil Jlink 2. 硬件连接 S32K144EVB-Q100开发板关于LED的原理图如下&#xff1a; 也就是具体连接关系如下&#xf…