正则表达式-“三剑客”(grep、sed、awk)

1.3正则表达式

正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串,将匹配的子串替换或者从某个串中取出符号某个条件的子串等,在linux中代表自定义的模式模版,linux工具可以用正则表达式过滤文本。Linux工具能够在处理数据时使用正则表达式对数据进行模式匹配,如果数据符合匹配的要求,那么就会进入下一步处理,如果数据不符合匹配的要求,就会被过滤掉

1.3.1 grep命令

grep(global regular expression print):表示全局正则表达式,使用权限是所有用户,grep命令是文本搜集工具,能够使用正则表达式搜索文本,并把匹配的行打印出来

-m 匹配几次后停止

-v 反选

-i 忽略字符大小写

-n 显示匹配行号

-c 统计匹配行数

-o 仅显示匹配到的字符串

-q 静默模式

-A 后几行

-B 前几行

-C 前后各几行

-e 多个选项之间“或者”关系

-w 匹配整个单词

-E 启用扩展正则表达式=egrep

-F 不支持正则表达式=fgrep

-f 处理两个文件的相同内容,以第一个文件作为匹配条件

-r 递归,但不处理软链接

-R 递归,处理软链接     

示例:A、B、C用法

#打印包含halt的行以及下面三行

[root@localhost ~]# grep -A3 "halt" /etc/passwd

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

#打印包含halt的行以及上面三行

[root@localhost ~]# grep -B3 "halt" /etc/passwd

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

#打印包含halt的行以及上下面三行

[root@localhost ~]# grep -C3 "halt" /etc/passwd

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

过滤出带有某个关键词的行,并输出行号

[root@localhost ~]# grep -n "root" /etc/passwd

1:root:x:0:0:root:/root:/bin/bash

10:operator:x:11:0:operator:/root:/sbin/nologin

过滤出不带有某个关键词的行,并输出行号

过滤出所有包含数字的行

[root@localhost ~]# grep "[0-9]" /etc/inittab

# multi-user.target: analogous to runlevel 3

# graphical.target: analogous to runlevel 5

过滤掉所有以#开头的行

过滤掉所有空行和以#开头的行

[root@localhost etc]# grep -v "^#" /etc/fstab |grep -v "^$"

/dev/mapper/centos-root /                       xfs     defaults        0 0

UUID=ee382caa-3a27-4985-a6a0-2920648fe4f4 /boot                   xfs     defaults        0 0

/dev/mapper/centos-swap swap                    swap    defaults        0 0

在正则表达式中,^表示行的开始,$表示行的结尾,那么空行则可以用^$表示

过滤出任意一个字符和重复字符

[root@localhost ~]# grep "r.o" /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

.表示任意一个字符,上例中,r.o表示把r与o之间有一个任意字符的行过滤出来

[root@localhost ~]# grep "ooo*" /etc/passwd

root:x:0:0:root:/root:/bin/bash

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

*表示零个或多个*前面的字符,上例中,ooo*表示oo、ooo、oooo.....或者更多的

[root@localhost ~]# grep ".*" /etc/passwd |wc -l

19

[root@localhost ~]# wc -l /etc/passwd

19 /etc/passwd

*表示零个或多个*前面的字符,空行也包含在内,它会把/etc/passwd文件里面的所有行都匹配到

指定要过滤出的字符出现次数

1.3.2 sed命令

sed编辑器是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中

s 替换,替换指定字符

d 删除,删除选定的行

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

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

c 替换,将选定行替换为指定内容

Y 字符转换,转换前后的字符长度必须相同

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

= 打印行号

l 打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

打印某行

[root@localhost ~]# sed -n '2'p /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin

打印所有行

打印某个区间内的行数

[root@localhost ~]# sed -n '1,3'p /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

打印包含某个字符串的行

[root@localhost ~]# sed -n '/root/'p /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

删除某些行

[root@localhost ~]# sed '1'd /etc/passwd

1.3.3 awk命令

awk是一种处理文本文件的语言,是一个强大的文本分析工具,可以在无交互的模式下实现复杂的文本操作,相较于sed常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理,因为awk相当适合小型的文本数据

awk格式及原理

awk命令逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理,awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印

FS 列分隔符,指定每行文本的字段分隔符,默认为空格或制表位,与-F作用相同

NF 当前处理的行的字段个数

NR 当前处理的行的行号(序数)

$0 当前处理的行的整行内容

$n 当前处理行的第n个字段(第n列)

FILENAME 被处理的文件名

RS 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’

$NF 最后一段

$(NF-1) 倒数第二段

截取文档中的某个段

[root@localhost ~]# head -n2 test.txt |awk -F ':' '{print $1}'

root

Bin

解析:

Awk是一个强大的文本处理工具

-F‘:’:选项指定字段分隔符为冒号

{print $1}:表示打印每行的第一个字段

[root@localhost ~]# head -n2 test.txt |awk -F ':' '{print $0}'

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

匹配字符或者字符串

[root@localhost ~]# awk '/oo/' test.txt

root:x:0:0:root:/root:/bin/bash

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@localhost ~]# awk -F ':' '$1 ~/oo/' test.txt

root:x:0:0:root:/root:/bin/bash

条件操作符

[root@localhost ~]# awk -F ':' '$3=="0"' /etc/passwd

[root@localhost ~]# awk -F ':' '$3>="500"' /etc/passwd

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

polkitd:x:999:998:User for polkitd:/:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

chrony:x:998:996::/var/lib/chrony:/sbin/nologin

[root@localhost ~]# awk -F ':' '$3>=500' /etc/passwd

polkitd:x:999:998:User for polkitd:/:/sbin/nologin

chrony:x:998:996::/var/lib/chrony:/sbin/nologin

awk的内置变量

awk常用的变量有OFS、NF和NR,OFS和-F选项有类似的功能,也是用来定义分隔符的,但是他是在输出的时候定义,NF表示用分隔符分隔后一共有多少段,NR表示行号

OFS的用法示例如下:

[root@localhost ~]# head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}'

root#0#0

bin#1#1

daemon#2#2

adm#3#4

lp#4#7

变量NF的具体用法如下:

[root@localhost ~]# head -n3 /etc/passwd |awk -F ':' '{print NF}'

7

7

7

[root@localhost ~]# head -n3 /etc/passwd |awk -F ':' '{print $NF}'

/bin/bash

/sbin/nologin

/sbin/nologin

变量NR的具体用法如下

[root@localhost ~]# head -n3 /etc/passwd |awk -F ':' '{print NR}'

1

2

3

还可以使用NR作为判断条件,如下所示

awk中的数学运算,示例命令如下

awk可以更改段值,示例命令如下

[root@localhost ~]# head -n 3 /etc/passwd |awk -F ':' '$1="root"'

root x 0 0 root /root /bin/bash

root x 1 1 bin /bin /sbin/nologin

root x 2 2 daemon /sbin /sbin/nologin

awk也可以进行对各个段的值进行数学运算,示例命令如下

[root@localhost ~]# head -n2 /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

[root@localhost ~]# head -n2 /etc/passwd |awk -F ':' '{$7=$4+$3}'

[root@localhost ~]# head -n2 /etc/passwd |awk -F ':' '{$7=$4+$3;print $0}'

root x 0 0 root /root 0

bin x 1 1 bin /bin 2

awk还可以计算某个段的总和,实力命令如下

[root@localhost ~]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd

2605

这里的END是awk特有的语法,表示所有的行都已经执行。

[root@localhost ~]# awk -F ':' '{if ($1=="root") {print $0}}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

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

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

相关文章

新版 Notepad++ 下载与安装教程

一、软件准备:麻烦点我 二、双击下载好的 notepad 软件进行安装,选择 “简体中文”。 三、默认 “下一步” 安装。 四、单击 “我接受” 按钮。 五、自定义安装位置,个人建议安装在 D 盘。 六、选择组件,默认 “下一步”。 七、勾…

通过OpenCV实现 Lucas-Kanade 算法

目录 简介 Lucas-Kanade 光流算法 实现步骤 1. 导入所需库 2. 视频捕捉与初始化 3. 设置特征点参数 4. 创建掩模 5. 光流估计循环 6. 释放资源 结论 简介 在计算机视觉领域,光流估计是一种追踪物体运动的技术。它通过比较连续帧之间的像素强度变化来估计图…

C++:list(用法篇+模拟实现)

文章目录 前言一、list 的用法1. list 简介2. 用法代码演示1)头/尾 插/删和迭代器遍历2)insert与erase3)排序sort相关4)其他相关 二、list模拟实现1. 结点类模板list_node2. 定义迭代器1)为什么要专门封装一个迭代器&a…

使用可白嫖的高配置服务器——DAMODEL进行AI开发教程

DAMODEL:DAMODEL 目前DAmodel注册并实名赠送50大洋的免费额度,搭载4090的服务器费用不到2r/h 教程: 完成注册并实名后 在此点击创建实例 选择实例配置 选择镜像,看你使用哪种dl框架 。 实例自带的磁盘会随实例释放。需要自己…

FineReport 图表切换维度

1、导入数据 可以参考导入Excel数据,直接导入数据也可以在数据库建表,Navicat直接导入数据 以下是数据库建表操作 -- 创建表 create table test11 ( orderTime date NULL, -- 下单时间 quantity int NULL -- 数量 ); 导入数据 2、SQL判断统计维度…

Docker 的数据管理

前置资源 Docker的数据管理资源.zip资源-CSDN文库 一、容器中数据管理 管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 1.数据卷 数据卷是一个供容…

2024 年 Mac 下这些生产力工具,好用到哭

每段关系最终都会结束 即使不是因为别的原因 也会因为死亡 我只知道 你不对她说出来 她就永远不知道 你的心意 她那天离开的时候 才知道一个道理 有时候 保护一样重要的东西的方式 不是守在她旁边 而是离开她 离得远远的远到看起来谁也 不在乎谁一样 今天呢&#x…

Go-知识泛型

Go-知识泛型 1. 认识泛型1.1 不使用泛型1.2 使用泛型 2. 泛型的特点2.1 函数泛化2.2 类型泛化 3. 类型约束3.1 类型集合3.2 interface 类型集合3.2.1 内置interface类型集合3.2.2 自定义interface类型集合3.2.2.1 任意类型元素3.2.2.2 近似类型元素3.2.2.3 联合类型元素 3.2.3 …

Linux网络命令:用于配置防火墙规则的一个用户友好的工具ufw详解

目录 一、概述 二、安装 UFW 三、启动、重启和关闭 UFW 1、启动 2、关闭UFW 3、 重启 UFW 四、查看 UFW 状态 五、UFW 基本命令 1. 允许端口 (1)单个 TCP 端口 (2)允许单个 UDP 端口 (3&#xff0…

音频响度归一化 - python 实现

在处理音频样本时,往往我们的音频样本由于录制设备,环境,人发音的音量大小的不同影响,会造成音频响度不统一,分布在一个不同的响度值域上。为了让语音模型更好的学习音频特征,就有必要对音频的响度进行归一…

【AIGC】ChatGPT是如何思考的:探索CoT思维链技术的奥秘

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯什么是CoT思维链CoT思维链的背景与技术发展需求 💯CoT思维链的工作原理💯CoT思维链的应用领域💯CoT思维链的优势💯CoT思维…

ppt压缩文件怎么压缩?压缩PPT文件的多种压缩方法

ppt压缩文件怎么压缩?当文件体积过大时,分享和传输就会变得困难。许多电子邮件服务对附件的大小有限制,而在网络环境不佳时,上传和下载大文件可能耗时较长。此外,在不同设备上播放时,较大的PPT文件还可能导…

基于Java+SpringBoot+Uniapp的博客系统设计与实现

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

<OS 有关> Windows 11 对不习惯菜单所做修改 自用

新安装 Windows 11 23H2 不习惯菜单,做的修改: 1. 禁用 Show More Options 鼠标右键 想使用旧版的 鼠标右键菜单, 不需要点 show more options , 如下图的方式: 创建一个 注册表文件: disable_content.reg Windows …

Maven 高级之分模块设计与继承、聚合

在软件开发中,随着项目规模的扩大,代码量和复杂度不断增加,传统的一体化开发模式逐渐暴露出诸多问题。为了解决这些问题,模块化开发应运而生,而 Maven 正是模块化开发的利器,它提供的继承和聚合机制为构建和…

STL源码剖析:STL算法

STL 算法总览 质变算法 mutating algorithms—会改变操作对象之值 所有的 STL算法都作用在由迭代器(first,last)所标示出来的区间上。所谓“质变算法”,是指运算过程中会更改区间内(迭代器所指)的元素内容。诸如拷贝(copy)、互换(swap)、替换(replace)、填写(fill)、删除(remov…

【H2O2|全栈】更多关于HTML(2)HTML5新增内容

目录 HTML5新特性 前言 准备工作 语义化标签 概念 新内容 案例 多媒体标签 音频标签audio 视频标签 video 新增部分input表单属性 预告和回顾 后话 HTML5新特性 前言 本系列博客是对入门专栏的HTML知识的补充,并伴随一些补充案例。 这一期主要介绍H…

一文区分SSTI 和 CSTI

前言 有时,SSTI(服务器端模板注入)和 CSTI(客户端模板注入)可能会由于它们相似的负载语法而混淆。这种混乱可能会导致渗透测试人员浪费时间尝试实现反向 shell,即使payload仅限于客户端。 定义 &#x1d…

电汽车充电革命:充电桩的过去现在与未来

电动汽车充电革命:中国充电桩行业的过去、现在与未来 一、发展历程概述 中国充电桩行业的发展历程可划分为以下几个阶段: 1. 初始期(2006-2008年):在此阶段,国家队主导市场,主要参与者包括国…

linux的学习第二天

1.vmware的功能: 快照 创建快照: 拍摄此虚拟机的快照:记录保存虚拟机的当前状态,如果系统出现故障,可以通过快照还原(错删系统时可以找到快照的系统状态,然后恢复系统) 恢复快照…