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

news2024/12/23 18:46:43

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

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

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

相关文章

vavr Java的函数式编程神器-Part1

微信公众号:阿俊的学习记录空间 小红书:ArnoZhang wordpress:arnozhang1994 博客园:arnozhang CSDN:ArnoZhang1994 1. 介绍 Vavr(前称 Javaslang)是一个为 Java 8 提供的函数式库,…

红外探测算法!!!

一、红外探测的基本原理 红外探测基于红外辐射与物体的热状态之间的关系。物体温度越高,辐射能量越大。红外探测器通过接收物体发出的红外辐射,将其转换为电信号,进而实现对目标的探测和识别。 二、红外探测算法的主要类型 背景差分法&…

[自然语言处理]RNN

1 传统RNN模型与LSTM import torch import torch.nn as nntorch.manual_seed(8)def dm01():参数1:输入向量的维数参数2:隐藏层神经元的个数参数3:隐藏层的层数:return:rnn nn.RNN(5, 6, 1)参数1:句子长度sequence_length参数2&am…

九芯电子NVH/NVF语音芯片OTA升级操作方法

OTA(Over-The-Air)升级是指通过无线网络远程对设备进行软件升级的过程。对于九芯电子NVH/NVF语音芯片,OTA升级可以通过WiFi模组实现,支持MQTT、HTTP等协议,方便快捷‌。 具体操作步骤如下: 1.进入九芯“智…

计算机毕业设计 基于Django的学生选课系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优

处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优 在进行压力测试时,遇到java.lang.OutOfMemoryError: Java heap space错误或者nginx报错no live upstreams while connecting to upstream通常意味着应用的…

重头开始嵌入式第四十七天(硬件 ARM裸机开发 RS232 RS4885 IIC)

目录 一.什么是RS232? 1. 历史背景: 2. 电气特性: 3. 连接器类型: 4. 通信特点: 5. 应用场景: 二.什么是RS485? 1. 电气特性: 2. 通信模式: 3. 传输距离与速率&…

技术路线图用什么画?用这个在线工具轻松完成绘制!

在当今快速发展的技术世界中,技术路线图已成为企业和团队不可或缺的战略规划工具。它不仅能够清晰地展示技术发展方向,还能帮助团队成员、利益相关者和投资者更好地理解和参与技术战略的制定过程。但不可否认的是,创建一个有效的技术路线图并…

如何免费为域名申请一个企业邮箱

背景 做SEO的是有老是会有一些网站来做验证你的所有权,这个时候,如果你域名对应的企业邮箱就会很方便。zoho为了引导付费,有很多多余的步骤引导,反倒是让不付费的用户有些迷茫,所以会写这个教程,按照教程走…

虚幻引擎GAS入门学习笔记(二)

虚幻引擎GAS入门(二) 学习位置UE5.3 GAS入门教程重置版 小明 MVC框架与技能初始化 让一开始创建的蓝图的基础GameplayAbility蓝图继承我们写好的BaseGameplayAbility类 创建一个库函数,写一些常用的函数在里面第一个得到玩家与玩家控制器 获取角色面对目标的方向…

c++11~c++20 thread_local

线程局部存储是指对象内存在线程开始后分配,线程结束时回收且每个线程有该对象自己的实例,简单地说,线程局部存储的对象都是独立各个线程的。实际上这并不是一个新鲜个概念,虽然C一直没因在语言层面支持它,但是很早之前…

Coggle数据科学 | 全球AI攻防挑战赛:金融场景凭证篡改检测 baseline

本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。 原文链接:全球AI攻防挑战赛:金融场景凭证篡改检测 baseline 赛题名称:全球AI攻防挑战赛—赛道二(AI核身-金融场景凭证篡改…

集智书童 | FMRFT 融合Mamba和 DETR 用于查询时间序列交叉鱼跟踪 !

本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。 原文链接:FMRFT 融合Mamba和 DETR 用于查询时间序列交叉鱼跟踪 ! 鱼的生长、异常行为和疾病可以通过图像处理方法进行早期检测,这对工厂水产养殖具有重…

基于云效流水线Flow | 高效构建企业门户网站

基于云效流水线Flow | 高效构建企业门户网站 基于云效流水线Flow | 高效构建企业门户网站企业门户网站方案架构一键部署方案概览部署准备一键部署 部署服务端(云效流水线)添加流水线源Java构建上传主机部署 资源删除操作体验1) 在体验过程中是…

Redis 5 种基本数据类型的前两个详解

Redis 共有 5 种基本数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。 这 5 种数据类型是直接提供给用户使用的&…

qos在企业网中的设计与实现

1.拓扑 地址规划 业务地址规划 部门 地址空间 vlan 网关 市场部门 10.0.100.0/24 Vlan100 10.0.100.254/24 研发部门 10.0.101.0/24 Vlan101 10.0.101.254/24 财务部门 10.0.102.0/24 Vlan102 10.0.102.254/24 人力部门 10.0.103.0/24 Vlan103 10.0.103.25…

[nmap] 端口扫描工具的下载及详细安装使用过程(附有下载文件)

nmap网络连接端扫描软件,用于主机发现、端口扫描、版本侦测、操作系统侦测 下载链接在文末 下载压缩包后解压 !!安装路径不要有中文 解压得到文件 双击.exe文件 更改安装路径并点击安装 等待安装 安装完成 nmap-7.95-setup.zip 夸克网盘打开…

pip install kaggle-environments ISSUE:Failed to build vec-noise

ISSUE: error: Microsoft Visual C 14.0 or greater is required. Get it with “Microsoft C Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/ [end of output]Failed to build vec-noiseC:\ProgramData\miniconda3\include\pyconfig.h(59): fat…

基于Springboot+Vue的家校互联系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

信息安全工程师(41)VPN概述

前言 VPN,即Virtual Private Network(虚拟专用网络)的缩写,是一种通过公共网络(如互联网)创建私密连接的技术。 一、定义与工作原理 定义:VPN是依靠ISP(Internet Service Provider&…