Shell 正则表达式及综合案例及文本处理工具
目录
一、常规匹配
二、常用特殊字符
三、匹配手机号
四、案例之归档文件
五、案例之定时归档文件
六、Shell文本处理工具
1. cut工具
2. awk工具
一、常规匹配
一串不包含特殊字符的正则表达式匹配它自己
例子,比如说想要查看密码包含root字符串的,可以这样写
cat /etc/passwd | grep root

二、常用特殊字符
| 特殊字符 | 作用 |
| ^ | 匹配一行的开头 |
| $ | 匹配一行的结束 |
| . | 匹配任意一个字符 |
| * | *不单独使用,他和上一个字符连用,表示匹配上一个字符0次或者多次 |
| [] | []表示匹配某个范围内的一个字符 |
| \ | 表示转义字符,一般和特殊字符连用表示特殊字符本身 |
例1:匹配以a字符开头的:
cat /etc/passwd | grep ^a

例子2:匹配以e字符结尾
cat /etc/passwd | grep e$

例子3:匹配任一个字符
cat /ect/passwd | grep r.t
cat /ect/passwd | grep r..t

例子4:查询包含以字符r开头,t结尾的字符串
cat /etc/passwd | grep r.*t

[6,8] ------匹配6或者8
[0-9] ------匹配一个0-9 的数字
[0-9]* ------匹配任意长度的数字字符串
[a-z] ------匹配一个 a-z 之间的字符
[a-z]* -----匹配任意长度的字母字符串
[a-c,e-f] ---匹配 a-c 或者 e-f之间的任意字符
用法例子看下图吧:

例子6:假如说我们想查找n_test.sh文件包含$符的那这就需要用到转义字符
cat /scripts/n_test.sh | grep '\$'

三、匹配手机号
我们都知道手机号是由第一位数字是1,第二位是3,4,5,7,8,9;其余数字随便。总共十一位数字,因此我们可以得出
"1569656955" | grep ^1[3,4,5,7,8,9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$

看上图可以得知,第一个数字符合手机号形式,而第二个明显不符合。但是这样【0-9】太多了,比较繁琐,我们就可以在后面用一个大括号表示出现次数来代替重复的0-9;但是要在正则表达式之前加入-E选项,如下:
grep -E ^1[3,4,5,7,8,9][0-9]{9}$
大于小于11位数字都是不符合的
四、案例之归档文件
实际生产应用中,往往需要对重要的数据进行归档备份
需求:实现一个目录归档备份的脚本,输入一个目录名称,将目录下所有文件按天归档保存,并将归档日期附加在文档文件名上,放在根目录下(/archive)
这里用到的归档命令: tar
后面可以加上 -c 选项表示归档,加上 -z 选项表示同时进行压缩得到的文件后缀名为 .tar.gz;不过要注意的是可能还是需要加上P选项代表允许我们使用绝对路径进行归档。
#!/bin/bash
# 首先判断输入的参数个数是否为1
if [ $# -ne 1 ]
then
echo "参数个数错误!应该输入一个参数作为归档目录名"
exit
fi# 从参数中获取目录名称,查看目录名称是否存在
if [ -d $1 ]
then
echo
else
echo
echo "目录不存在!"
echo
exit
fi# 获取绝对路径
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1);pwd)# 获取当前日期,归档文件名拼接成日期
DATE=$(date +%y%m%d)# 订阅生成归档文件名称
FILE=archive_${DIR_NAME}_$DATE.tar.gz# 订阅生成归档文件的路径
DEST=/archive/$FILE# 开始归档目录文件
echo "开始归档...."
echo# -c 归档 z 压缩 f可视化
tar -czPf $DEST $DIR_PATH/$DIR_NAME# 判断上面文件归档文件操作是否成功
if [ $? -eq 0 ]
then
echo
echo "归档成功"
echo "归档的文件为:$DEST"
echo
else
echo "归档出现问题"
echo
fiexit

五、案例之定时归档文件
比如说我们想要1分钟归档文件一次;就可以设置定时器如下:
*/1 * * * * /archive/archive_test.sh /scripts

可以看得出确实添加了一个归档文件
六、Shell文本处理工具
1. cut工具
cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。
cut 命令从文件的每行剪切字节、字符和字段并将这些字节、字符和字段输出
基本用法
cut [选项参数] filename
选项参数
| 选项参数 | 功能 |
| -f | 列号,提取第几列 |
| -d | 分隔符,按照指定分隔符分割列,默认是制表符"\t" |
| -c | 按字符进行切割,后加n表示取第几列 比如-c 1 |
比如一个文本文件有以下诗歌:

比如说我们需要提取第一列,那应该这样写,按空格指定分割第一列;如下:
cut -d " " -f 1 cut_test.txt

假如我们想要提取第一和第四列,可以这样写:
cut -d " " -f 1,4 cut_test.txt

比如说我们想知道ens33网卡的所有IP,那么首先应该是ifconfig ens33,然后管道符|,再然后正则表达式获取ip 最后利用管道符切割。

因为ip在第十列,因此-f后面跟10;整体写法如下:
ifconfig ens33 | grep netmask | cut -d " " -f 10
2. awk工具
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理
基本用法
awk [选项参数] '/pattern1/{action1}/pattern2/{action2}...' filename
pattern:表示awk 在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
| 选项参数 | 功能 |
|---|---|
| -F | 指定文件分割符 |
| -v | 分支一个用户定义变量 |
不过有些版本的系统是不支持awk工具的,那么如何查看自己系统是否支持awk只需要输入以下句子即可:
which awk

出现上面那段话说明你的系统是支持awk工具的
实例操作
1. 搜索passwd文件以root关键字开头的所有行,并输出该行的第7列
cat /etc/passwd | awk -F ":" '/^root/ {print $7}'

2. 搜索passwd文件以root关键字开头的所有行,并输入该行的第1列和第7列,中
间以","分割
cat /etc/passwd | awk -F ":" '/^root/ {print $1 "," $7}'

3. 只显示/etc/passwd 的第一列和第七列,以逗号分割,且在所有行前面添加列
名"start"在最后一行添加"over"
cat /etc/passwd | awk -F ":" '/^root/ {print $1"," $7} END{print "over"}'

4. 将passwd文件中的用户id增加数值1并输出
cat /etc/passwd | awk -F ":" '{print $3+1}'

内置变量
| 变量 | 说明 |
|---|---|
| FILENAME | 文件名 |
| NR | 已读记录数(行号) |
| NF | 浏览记录的域的个数(切割后,列的个数) |
示例操作
1. 统计passwd文件名,每行的行号,每列的列数
cat /etc/passwd | awk -F ":" '{print " 文件名:" FILENAME "\t行号:" NR "\t列数: " NR}' /etc/passwd

2. 查询ifconfig命令输出结果中的空行所在行号
ifconfig | awk '/^$/ {print"空行: " NR}'

相关文章:
Shell 正则表达式及综合案例及文本处理工具
目录 一、常规匹配 二、常用特殊字符 三、匹配手机号 四、案例之归档文件 五、案例之定时归档文件 六、Shell文本处理工具 1. cut工具 2. awk工具 一、常规匹配 一串不包含特殊字符的正则表达式匹配它自己 例子,比如说想要查看密码包含root字符串的&#x…...
React | Center 组件
在 Flutter 中有 Center 组件,效果就是让子组件整体居中,挺好用。 React 中虽然没有对应的组件,但是可以简单封装一个: index.less .container {display: flex;justify-content: center;align-items: center;align-content: ce…...
头歌C++之函数强化练习题
目录 第1关:结构实现复数运算 任务描述 编程要求 第2关:求亲密对数 任务描述 编程要求 第3关:计算一年的第几天 任务描述 编程要求 第4关:正整数求和 任务描述 编程要求 第5关:Pig Latin 任务描述 编程要求 第6关:打印日历 任务描述 编程要求 第1关:结…...
淘宝扭蛋机小程序:开启你的惊喜之旅
随着移动互联网的飞速发展,各种小程序层出不穷,其中,淘宝扭蛋机小程序以其独特的互动性和趣味性,吸引了大量用户。本文将为你详细介绍这款小程序的特色功能、用户体验以及如何使用,助你开启一段惊喜之旅。 一、特色功…...
Jmeter 基于Docker 实现分布式测试
基于Docker 实现分布式测试 制作Jmeter基础镜像制作工作节点镜像启动工作节点启动控制节点遇到的问题 使用Docker 部署Jmeter非常方便,可以省略软件的安装以及配置,比如jdk、jmeter。需要部署多个工作节点可以节省时间。 制作Jmeter基础镜像 下载jmeter…...
Vite与Webpack打包内存溢出问题优雅处理方式
Vite与Webpack打包内存溢出问题处理 文章目录 Vite与Webpack打包内存溢出问题处理1. Vite1. 打包错误提示2. 命令行方式解决3. 配置环境变量方式解决1. 设置变量2. 配置系统的环境变量 2. Webpack1. 打包错误提示2. 命令行方式解决3. 配置环境变量方式解决1. 设置变量2. 配置系…...
sqlalchemy——@listens_for
问:sqlalchemy如何实现:表中指定数据更新时,其time字段自动更新?答:使用listens_for 装饰器来注册事件监听器,确保在项目数据更新时触发相应的处理逻辑。 示例代码如下: # coding: utf-8 impo…...
MySQL进阶之锁(全局锁以及备份报错解决)
锁 全局锁 全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语 句,已经更新操作的事务提交语句都将被阻塞。 其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定ÿ…...
C#实现windows系统重启、关机
1、C#实现windows系统重启、关机 实现原理,使用系统shutdown命令执行: 强制关机: shutdown -s -f -t 0 强制重启: shutdown -r -f -t 0 2、关于shutdown命令详解: C#实现控制Windows系统关机、重启和注销的方法&…...
JS中Set和Map用法详解
目录 1、Set 1.基本用法 2.Set 实例的属性和方法 3.遍历操作 2、Map 1、Set 1.基本用法 ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成 Set 数据结构。 const s …...
使用nginx对视频、音频、图片等静态资源网址,加token签权
目前很多静态资源,都可以无权限验证,进行访问或转发,对有价值的资源进行签权,限制转发无法在代码中实现拦截,我们可以使用nginx对视频、音频、图片等静态资源网址,加token签权 如: http://192…...
[每周一更]-(第86期):NLP-实战操作-文本分类
NLP文本分类的应用场景 医疗领域 - 病历自动摘要: 应用: 利用NLP技术从医疗文档中自动生成病历摘要,以帮助医生更快速地了解患者的状况。 法律领域 - 法律文件分类: 应用: 使用文本分类技术自动分类法律文件…...
【Springcloud篇】学习笔记五(十章):Gateway网关
第十章_Gateway新一代网关 1.Gateway简介 1.1官网 上一代zuul 1.X:https://github.com/Netflix/zuul/wiki 当前gateway:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 1.2是什么 SpringCloud …...
Linux开发工具
前言:哈喽小伙伴们,经过前边的学习我们已经掌握了Linux的基本指令和权限,相信大家学完这些之后都会对Linux有一个更加深入的认识,但是Linux的学习可以说是从现在才刚刚开始。 这篇文章,我们将讲解若干个Linux的开发工…...
C++ 动态规划 线性DP 最长共同子序列
给定两个长度分别为 N 和 M 的字符串 A 和 B ,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数 N 和 M 。 第二行包含一个长度为 N 的字符串,表示字符串 A 。 第三行包含一个长度为 M 的字符串,表…...
【备战蓝桥杯】——循环结构终篇
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-yl4Tqejg4LkjZLAM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…...
为什么说Python语法简单?
Python被广泛认为是一种语法简单、易学易用的编程语言,这种观点有几个关键的原因: 1、清晰简洁的语法结构: Python采用了清晰而简洁的语法结构,使得代码易于阅读和理解。Python的语法设计强调代码的可读性,采用了清晰…...
【HarmonyOS应用开发】ArkUI 开发框架-进阶篇-管理组件状态(九)
管理组件状态 一、概述 在应用中,界面通常都是动态的。下图所示,在子目标列表中,当用户点击目标一,目标一会呈现展开状态,再次点击目标一,目标一呈现收起状态。界面会根据不同的状态展示不一样的效果。 Ar…...
EF Core入门例子(以SqLite为数据库)
测试环境: visual studio 2017 .net core 2.1 具体步骤如下: 1 新增名称为EFCoreDemo的.net core控制台程序,版本选择.net core 2.1,项目不能放到带中文的目录下,不然到后面执行Add-Migration命令时会报如下的错误…...
centos7 安装nginx
在 CentOS 7 上安装 Nginx,你可以选择从官方仓库(EPEL)安装,或者手动编译安装。以下是通过 EPEL 安装 Nginx 的步骤: 方法一:通过 EPEL 仓库安装 添加 EPEL 仓库: sudo yum install epel-relea…...
告别手动翻找!用bcftools和Python脚本3分钟搞定VCF文件样本清单提取
告别手动翻找!用bcftools和Python脚本3分钟搞定VCF文件样本清单提取 在基因组数据分析的日常工作中,VCF文件就像一本厚重的电话簿,记录着每个样本的遗传变异信息。而样本ID清单则是这本电话簿的目录页——没有它,我们甚至不知道手…...
实在 Agent 在医药行业有哪些合规能力?2026年药企数字化合规转型深度实战指南
在2026年4月,中国医药行业进入了“全域穿透、动态升级”的严苛监管新纪元。随着《关于深入开展打击医保药品领域违法违规问题专项行动的通知》的正式下发,以及《生物制品分段生产操作指南》等法规的密集施行,传统依赖人力与固定规则的合规模式…...
别再只搜字符串了!x64dbg逆向破解卡密软件的另一种思路:从API断点MessageBoxW开始
逆向工程实战:突破字符串搜索局限的API断点追踪法 在逆向分析领域,字符串搜索常被视为破解卡密验证的"第一板斧"。但当你面对一个精心设计的商业软件时,这招往往会失灵——字符串被混淆、关键提示信息被加密、甚至整个代码段都被加…...
无人车避障新思路:手把手教你用MATLAB实现贝塞尔曲线路径规划(含完整代码)
无人车避障新思路:手把手教你用MATLAB实现贝塞尔曲线路径规划(含完整代码) 在自动驾驶和机器人导航领域,路径规划的核心挑战之一是如何在复杂环境中生成既安全又符合车辆运动学的轨迹。传统方法如A*或Dijkstra算法虽然能找出最短路…...
用快马平台5分钟打造heic转jpg在线工具原型,零代码实现图片格式转换
最近工作中遇到一个需求:需要把手机拍摄的HEIC格式照片批量转换成JPG格式。这种格式转换的需求其实很常见,特别是现在iPhone默认都使用HEIC格式保存照片。作为一个前端开发者,我决定用InsCode(快马)平台快速实现一个在线转换工具的原型。 需求…...
四旋翼姿态解算实战:MahonyAHRS算法中的初始姿态角优化策略
1. 四旋翼姿态解算与MahonyAHRS算法基础 四旋翼飞行器的姿态解算是飞行控制系统的核心环节,它直接决定了飞行器的稳定性和操控性。简单来说,姿态解算就是通过传感器数据计算出飞行器当前的俯仰、横滚和偏航角度。这就像我们人类闭着眼睛也能感知自己身体…...
计算机毕业设计:Python智慧航班数据大屏及管理后台 Django框架 可视化 MLP 大数据 机器学习 深度学习(建议收藏)✅
1、项目介绍 技术栈 采用 Python 3.10 编程语言,基于 Django 框架进行后端开发,前端使用 Echarts 可视化技术搭建数据大屏,并结合多层感知器(MLP)神经网络模型实现航班延误状态与机票价格的预测功能。 功能模块飞机航…...
FANUC机器人焊接产线故障急救手册:从SRVO-062到SPOT-012的20个报警代码实战解析
FANUC机器人焊接产线故障急救手册:从SRVO-062到SPOT-012的20个报警代码实战解析 凌晨三点的车间警报声格外刺耳,焊接机器人突然停止工作,示教器屏幕上跳出的SRVO-062代码让值班工程师瞬间清醒。这不是教科书里的理论故障,而是汽车…...
敏捷测试实践:两周一个迭代的质量保障
在软件快速交付的时代,以两周为一个迭代周期的敏捷开发模式已成为行业主流。对于测试从业者而言,这既是挑战也是机遇。传统的“瀑布式”测试在漫长的周期后介入的模式已彻底失效,质量保障活动必须无缝融入高速运转的迭代流水线,从…...
普通人如何杀入AI赛道?(附岗位薪资与避坑指南)AI转行必看!
AI几乎成为了打工人的必修课。和大家交流过程中,最常见的一些问题:“现在转行AI还来得及吗?”、“我不懂代码,能做AI产品经理吗?”、“以及怎么转行做AI?”。 答案是:不仅来得及,而且…...
