正则表达式;grep、sed、awk、soft、uniq、tr 详解

正则表达式

概念

正则表达式(Regular Expression,常简写为regex、regexp或RE)是一种强大的文本处理工具,它使用一种特殊的字符序列来帮助用户检查一个字符串是否与某种模式匹配。

标准正则表达式

首先安装正则表达式pcre库

创建一个用于测试的文件

内容如下,复制到测试文件中

he was short and fat.
he was weating a blue polo shirt with black pants.
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12!
google is the best tools for search keyword.
PI=3.14
a wood cross!
Actions speak louder than words

#woood #
#woooooooood #
AxyzxyzxyzxyzC
I bet this place is really spooky late at night!
Misfortunes never come alone/single.
I shouldn't have lett so tast.

grep

通过grep命令来精确查找该文件带有the的行,-n选项:显示行号

加上-i选项,不区分大小写

在文件中查找包含"short"或者"shirt"的行,并显示它们的行号

开头和结尾过滤(^、$)

查找该文件中前一个字符不是w并以oo结尾的行,并显示行号

^:取反

通过指定小写字母a-z和大写字母A-Z,筛选 不以大写或小写字母开头且包含oo的行

也可以去掉^符号,显示以大写或小写字母开头且包含oo的行

显示整行的开头是小写或大写字母 且后方跟着oo字符的行

过滤出任何字符结尾的行,在这里,. 被识别为通配符了,所以使用转义符来识别

在.前面加上转义符,过滤出只有以.结尾的行

显示空白行

或加上-v选项取反,显示除了空白行的所有行

如果要过滤一个配置文件的所有注释行,就通过^#来获取#开头的行,再添加-v取反,就实现显示#开头以外的行

再添加管道符 | 过滤空白行,就实现了过滤文件内注释和空白行的效果

通配符

因为.是通配符,匹配任何字符,所以通过w..d来匹配 以w开头d结尾 并且中间包含两个字符 的行

显示 以w开头跟着一个或多个任意字符且以d结尾单词的行

.* —— 匹配任意数量的任意字符

过滤数字

使用 [0-9] 筛选,显示包含单个都是0-9数字的行

使用 [0-9][0-9] 匹配两个连续为数字0-9的字符的行,下面这张图片中,第六行的3没有被匹配到,因为是单个字符

过滤连续字符

通过 字符\{数量\} 来过滤连续两个o出现的行,每个大括号前要使用转义符

过滤 以wo开头 字符o后连续2-5个o,且以d结尾的行

'wo\{最小值,最大值\}'

如果将最大值空着,只在最小值后跟上逗号,表示2个以上连续字符

这里表示 以wo开头 后面并连续2个以上o字符 且以d结尾

扩展正则表达式

使用 egrep 命令

可以在表达式内直接用管道符增加过滤条件

下方示例命令表示:过滤和显示 /etc/ssh/sshd_config 文件中非空行且不以 # 开头的行

sed

过滤、编辑

过滤

在这个命令中,-n 参数会禁止默认的打印行为,而 p(print) 命令会遍历打印与模式匹配的行。因此,整个命令其实等同于 cat test,它会打印出 test 文件的全部内容。

指定数字 实现遍历打印第几行内容

遍历打印输出奇数行

遍历输出偶数行

第1-10行的奇数行

第5行到结尾的偶数行

遍历打印输出包含the的行

以#开头的行和以P开头的行 遍历输出

以4结尾的行 和以.结尾的行(需要转义符转义)

删除空行并输出出来,这种编辑并不会影响文件本身的内容,只是把指定过滤的内容输出出来

删除小写字母a-z开头的行 遍历输出

删除第三行内容并遍历打印输出

显示行号并删除第三行内容 遍历打印输出

替换文本中的第一个匹配项,只将每行的第一个the 替换为TTT 后续的the不进行操作

替换每行的所有the为TTT

只替换每行的第2哥the为TTT

编辑

加上 -i 选项永久修改文件中每行第2个the为TTT

迁移

将test.txt文件中包含the的行存储在剪贴板中,再将剪贴板中的内容追加到末尾最后一行

将第1行到第5行的内容剪贴到剪贴板中,追加剪贴板内容到第10行之后

将指定内容插入到第一行

将指定内容追加到第一行之后

修改内容

如果要在脚本中修改指定文件内容就可以像下方命令一样通过 -i 替换

awk

通过grep筛选出Mem的行,再通过awk提取这一行的第7列

使用 -F 选项指定:为分隔符,输出第1列

使用print或print $0 输出整个文件的内容

输出第3行到第10行内容

使用逻辑运算符,来输出指定行内容

输出所有偶数行(行号 % 2 = 0)

输出所有奇数行(行号 % 3 = 1)

输出以sshd开头的行

输出/etc/passwd文件中以nologin结尾的行

awk常见选项

选项

说明

$0

表示整个当前行

$1

每行第一个字段

NF

字段数量变量

NR

每行的记录号,多文件记录递增

FNR

与NR类似,不过多文件记录不递增,每个文件都从1开始

\t

制表符

\n

换行符

FS

 BEGIN时定义分隔符

RS

输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)

~

匹配,与==相比不是精确比较

!~

不匹配,不精确比较

==

等于,必须全部相等,精确比较

!=

不等于,精确比较

&&

逻辑与

||

逻辑或

+

匹配时表示1个或1个以上

/[0-9][0-9]+/

两个或两个以上数字

/[0-9][0-9]*/

 一个或一个以上数字

OFS

输出字段分隔符, 默认也是空格,可以改为制表符等

ORS

输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕

-F'[:#/]'

定义三个分隔符

soft

排序命令

以开头a-z排序内容

加上 -r 选项实现反向排序

uniq

去重命令

创建一个文件,编辑如下内容

使用uniq命令实现去重效果

-c:显示行号

-d:把重复的字符串输出S

tr

字符控制

通过 -s 选项,实现字符串去重

通过 -d 选项实现字符串删除指定字符

去重并且将大写字母转换为小写字母

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

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

相关文章

草莓不是莓,西瓜才是莓——解读 Kubernetes 中被驱逐的 Pod

每天都有成千上万的 Pod 从节点中被驱逐。它们无家可归、困惑不已,不得不放弃之前的生活方式。其中一些甚至变成无节点状态。 在 Kubernetes 中 Pod 被驱逐意味着什么?我们常常能看到 Pod 因为资源不足被终止。但为什么会发生这种情况呢? 驱…

ChatGPT API技术教程OpenAI APIKey在线对接-Chat Completion对象

表示模型根据提供的输入返回的聊天完成响应。 {"id": "chatcmpl-123","object": "chat.completion","created": 1677652288,"model": "gpt-3.5-turbo-0125","system_fingerprint": "fp…

ElementUI组件库,分页组件靠右显示

ElementUI组件库,分页组件靠右显示 分页组件 ,el-pagination组件默认靠左显示,靠右显示的话只需给layout添加一个“->”属性值即可, 看图

AMEYA360代理品牌江苏润石:RS8661/2/4系列高压精密低噪声运算放大器

继RS8651/2/4系列高压精密低噪声运算放大器成功推向市场,润石科技再次成功量产RS8661/2/4系列高压精密低噪声运算放大器。 RS8661/2/4系列产品将工作电压提升到最高36V(18V)、失调电压进一步优化到5μV、在工业现场数据采集、各种仪器仪表测量设备\分析设备上有着广…

IDEA services模块无法启动springboot服务(添加了springboot但是为空白)

https://blog.csdn.net/m0_54042402/article/details/117918995 https://blog.csdn.net/qq_46550964/article/details/122235235 Alt8 显示services模块 发现有springboot启动模块,点一下springboot之后,这个模块就消失了 会自动在.idea文件夹下的work…

选专业填志愿,家庭经济条件是必须考虑因素

对比过去,大部分家庭的物质条件已经好很多了,但也有一部分家庭条件较为困难,对于家庭条件较为困难的高考学生而言,高考志愿填报需要考虑的因素更多,因为自己就读的专业,绝对不能是自己的家庭无法负担的专业…

数值分析笔记(三)函数逼近

最佳平方逼近 函数逼近是使用一种简单易算的函数来近似表示一个复杂函数。 该问题可转化为求解线性方程组 G n C F n ​ G_{n}CF_{n}​ Gn​CFn​​ 其中,系数 C ( c 0 , c 1 , ⋯ , c n ) T , F n ( ( f , φ 0 ) , ( f , φ 1 ) , ⋯ , ( f , φ n ) ) T C(c…

Java网络编程之UDP通信与TCP通信交互代码实现

​import java.net.InetAddress; import java.io.IOException; class Main {public static void main(String[] args) {try { InetAddress localAddress InetAddress.getLocalHost(); //获得本地主机 InetAddress remoteAddress InetAddress.getByName("www.itcast.cn&qu…

非强化学习的对齐方法

在文章《LLM对齐“3H原则”》和《深入理解RLHF技术》中,我们介绍了大语言模型与人类对齐的“3H原则”,以及基于人类反馈的强化学习方法(RLHF),本文将继续介绍另外一种非强化学习的对齐方法:直接偏好优化&am…

【Java】解决Java报错:IllegalMonitorStateException in Synchronization

文章目录 引言一、IllegalMonitorStateException的定义与概述1. 什么是IllegalMonitorStateException?2. IllegalMonitorStateException的常见触发场景3. 示例代码 二、解决方案1. 确保在同步代码块或方法中调用wait()、notify()和notifyAll()2. 使用同步方法3. 使用…

鸿蒙开发系统基础能力:【@ohos.inputMethod (输入法框架)】

输入法框架 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import inputMethod from ohos.inputMethod;inputMethod8 常量值。 系统能力:以下各项对应的系统能力均为Sy…

NetSuite Account Merge 科目合并功能分析

最近项目中,客户有提到过能否将不用的Account与新建的Account进行合并,即我们所说的Merge功能~可以,但是该功能有使用的限制,比如最直接的一点需要注意,不同类型的Account是不可以使用Merge功能的&#xff…

Linux系统学习——指令三

Linux系统学习——指令三 Linux系统学习——指令三chmod — 文件执行权限添加文件执行权限去除文件执行权限 查找文件中特定关键字使用vi编辑文件并查找特定关键字文本文件查找特定关键字1: 使用 grep 命令2: 使用 find 命令3: 使用 awk 命令4: 使用 sed 命令5: 使用 ag 命令&a…

一文2000字记录基于jmeter+perfmon的稳定性测试

01、任务情况 1、任务总览 本次平台稳定性测试的目的在于:在服务器压力处于较饱和(达到80%系统最大TPS)压力之下,在较长时间(>8小时)之内观测服务器稳定性问题,以及资源使用情况和异常。 …

uniapp或安卓对接扫码枪

背景介绍 最近老板又随便丢过来一个扫码枪让我研究快速上线,我心想着又是什么串口通信吗,结果发现是usb的,我想着是不是有什么协议,结果直接插上电脑或者手机 均可在输入框直接输入,不用任何的代码编写 但结合了一下…

MFC案例:自制工具条(Toolbar)按钮的小程序

程序目标:在基于对话框的MFC项目中,自制三个 Toolbar 按钮(用颜色区分,分别为红、绿、蓝);程序运行时,单击红色按钮显示一个红色的填充椭圆;再单击绿色按钮则进行清屏;最…

基于AT89C52单片机的超声波测距设计—数码管显示

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/89456475?spm=1001.2014.3001.5503 C 源码+仿真图+毕业设计+实物制作步骤+10 在这里插入图片描述 题 目: 基于52的超声波测距汽车防撞系统 学生姓名 [姓名] 学 号 [学号…

力扣921. 使括号有效的最少添加

Problem: 921. 使括号有效的最少添加 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.定义int变量res、need分别记录需要插入的左括号数和所需与左括号配对的右括号数; 2.遍历字符串: 2.1.若当为左括号,则need,表示…

QT拖放事件之八:通过全局剪切板中的接口QClipboard::mimeData()来获取MIME类型数据

1、演示效果 首先向剪切板写入数据,然后点击paste按钮进行从全局剪切板中 获取 MIME数据。。。 2、核心代码 void Widget::on_pasteBtn_clicked() {const QClipboard* clipBoard = QGuiApplication::clipboard()

win10修改远程桌面端口,Windows 10下修改远程桌面端口及服务器关闭445端口的操作指南

Windows 10下修改远程桌面端口及服务器关闭445端口的操作指南 一、修改Windows 10远程桌面端口 在Windows 10系统中,远程桌面连接默认使用3389端口。为了安全起见,建议修改此端口以减少潜在的安全风险。以下是修改远程桌面端口的步骤: 1. 打…