正则表达式;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 选项实现字符串删除指定字符

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

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

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

相关文章

C++ | Leetcode C++题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution { private:void dfs(vector<vector<char>>& grid, int r, int c) {int nr grid.size();int nc grid[0].size();grid[r][c] 0;if (r - 1 > 0 && grid[r-1][c] 1) dfs(grid, r - 1, c);if (r …

Shell 编程入门

优质博文&#xff1a;IT-BLOG-CN 【1】x.sh文件内容编写&#xff1a; 固定开头&#xff1a;#&#xff01;/bin/sh&#xff1b; 【2】学习的第一个命令就是echo输出的意思&#xff1b; 【3】其实shell脚本也就是在文件中写命令&#xff0c;但是我们要写的是绝对路径&#xff1a…

mysql岗位实习----教务系统管理

教务管理系统 一、DDL CREATE TABLE users (user_id int(11) NOT NULL AUTO_INCREMENT COMMENT 用户ID,username varchar(50) NOT NULL COMMENT 用户名,password varchar(255) NOT NULL COMMENT 密码,gender enum(男,女) NOT NULL COMMENT 性别,email varchar(100) DEFAULT N…

C++初学者指南第一步---14.函数调用机制

C初学者指南第一步—14.函数调用机制 文章目录 C初学者指南第一步---14.函数调用机制1.记住&#xff1a;内存的结构2.函数调用是如何工作的3. 不要引用局部变量4. 常见编译器优化5. Inlining内联 1.记住&#xff1a;内存的结构 堆&#xff08;自由存储&#xff09; 用于动态存…

Redis-实战篇-缓存雪崩

文章目录 1、缓存雪崩2、解决方案&#xff1a; 1、缓存雪崩 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 2、解决方案&#xff1a; 给不同的key的TTL添加随机值利用Redis集群提高服务的可用性…

华为电脑重装系统如何操作?电脑Win11系统重装注意什么?图文详细解答

随着科技的不断进步&#xff0c;操作系统更新换代的步伐也日益加快。华为电脑作为市场中的佼佼者&#xff0c;其搭载的Windows 11系统凭借其强大的性能和丰富的功能受到了用户的广泛好评。然而&#xff0c;随着使用时间的推移&#xff0c;系统可能会出现各种问题&#xff0c;如…

验证码技术 easy-captcha

依赖 <!-- easy-captcha用来生成验证码&#xff0c;由于jdk9以后&#xff0c;内置JavaScript去掉了&#xff0c;所以需要导入这个org.openjdk.nashorn --> <dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</arti…

牛客挑战赛75 D. 不存在的玩家(sg图dp)

题目 思路来源 灵茶山群群友 https://blog.csdn.net/Code92007/article/details/110354429 题解 其实想了想&#xff0c;和20年小米邀请赛决赛这个G题的dp思路是一样的&#xff0c;姑且称为sg图dp吧 按sg值从大到小dp&#xff0c;每次补上全局sg值-1的这些点&#xff0c; …

网约车停运损失费:2、协商过程

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…

Houdini 通过wedge来做模拟参数对比 (PDG TOP)

我们的设定如下例子 这是个简单的布料悬挂的例子。上方两个角分别被固定住了&#xff0c;然后在distance约束下布料下垂。 我们现在的目的是想要对比不同的streach stiffness对模拟的影响。 第一步&#xff1a;找到stiffness参数&#xff0c;右键expression->edit expre…

iis控制文件或者文件夹是否允许被访问

问题 出于数据或者网络安全&#xff0c;禁止扫描工具直接扫描到某些包含敏感信息的文件&#xff0c;尤其比如日志、配置&#xff0c;如何不写代码&#xff0c;使用iis处理呢&#xff1f; 假设有如下网站&#xff0c;访问http://localhost:6001/Logs/20240626.txt就会出现日志&…

AI开发Windows环境搭建

文章目录 1. GPU 支持检查2. 安装 Anaconda3. 创建 PyTorch 虚拟环境3.2 创建虚拟 PyTorchEnv 环境3.3 检查、激活、推出虚拟环境3.4 虚拟环境中python包管理3.5 虚拟环境中安装 PyTorch 框架 4. TensorFlow 安装 1. GPU 支持检查 打开 Task Manager (任务管理器&#xff09;&…

DPDK使用make编译并运行示例程序

环境&#xff1a; VMware Workstation 16 Pro 16.2.4 虚拟机系统&#xff1a;Centos 8 DPDK版本&#xff1a;stable-20.11.10 下载源码后&#xff0c;使用meson和ninja编译完成、配置并挂载大页、内核和VFIO设置完成&#xff0c;在dpdk源码目录下的build/…

docker搭建mongo分片集群

1、mongo分片集群 MongoDB分片集群是一种可扩展的数据库架构&#xff0c;用于处理大量数据和高并发访问。它将数据分成多个分片&#xff0c;并将这些分片分布在多个服务器上&#xff0c;从而实现数据的平衡存储和并行处理 。 通过使用MongoDB的分片集&#xff0c;可以实现数据…

NestJs 使用 RabbitMQ

NestJs 使用 RabbitMQ 既然是使用 RabbitMQ 那先不管其他的 把 RabbitMQ 装上再说 RabbitMQ 安装 这里直接找他们官网就行 Installing RabbitMQ | RabbitMQ 这里我们选择使用 docker 安装 快捷方便 这里直接参考&#xff1a; https://juejin.cn/post/719843080185010591…

鸿蒙面试心得

自疫情过后&#xff0c;java和web前端都进入了冰河时代。年龄、薪资、学历都成了找工作路上躲不开的门槛。 年龄太大pass 薪资要高了pass 学历大专pass 好多好多pass 找工作的路上明明阳关普照&#xff0c;却有一种凄凄惨惨戚戚说不清道不明的“优雅”意境。 如何破局&am…

宿主机无法通过ip连接wsl2解决方案

文章目录 原因排查网络模式win11防火墙关闭wsl ubuntu防火墙 如果之前能连接现在连接不上可以参考该方案 原因排查 网络模式win11防火墙(win11新增了Hyper-V防火墙)wsl2 ubuntu防火墙 网络模式 wsl2的默认网络模式是NAT&#xff0c;建议修改为镜像模式。在C:\Users\<User…

【深度学习】【Lora训练3】StabelDiffusion,Lora训练过程,秋叶包,Linux,SDXL Lora训练

为了便于使用&#xff0c;构建一个docker镜像来使用秋叶包。2024年6月26日。 docker run -it --gpus all -v /ssd/xiedong:/datax --net host kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-xformers bashgit clone --recurse-submodules https://github.com/A…

408计算机网络--物理层

一、物理层概述 物理层是干嘛使得&#xff1f; 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。 物理层主要任务是确定与传输媒体接口有关的一些特性。定义标准可以理解为插排上的两孔三孔 机械特性&#xff1a;定义物理连接…

Rill Data:实时数据分析的未来

欢迎来到 Rill Rill是从数据湖到仪表板的最快路径。 rilldata 与大多数 BI 工具不同&#xff0c;Rill 带有自己的嵌入式内存数据库。数据和计算位于同一位置&#xff0c;查询以毫秒为单位返回。 因此&#xff0c;您可以即时透视、切片和深入研究数据。 下载 Rill 开始建模数…