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
fi

exit

五、案例之定时归档文件

比如说我们想要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}'

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

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

相关文章

DNS解析原理和k8s DNS 实践

1. 问题背景 1.1 域名解析异常 近期开发的一个功能,需要在k8s集群容器环境中调用公司内部api,api提供了内网域名,解析内网域名异常导致请求超时,因此梳理了下DNS的知识点。 可以先看到下面👇这段配置,修…

.NetCore部署微服务(二)

目录 前言 概念 一 Consul注册服务中心 1.1 consul下载 1.2 consul运行 二 服务注册 2.1 安装Consul包 2.2 修改配置文件 2.3 注入Consul服务 2.3 修改Controller,增加HealthCheck方法 三 运行服务 3.1 docker运行服务 前言 上一篇讲到微服务要灵活伸缩…

WPS Office找回丢失的工作文件

WPS office恢复办公文件方法有两种. 1.通过备份中心可以查看近期编辑 office 历史版本进行恢复. 2.缓存备份目录可以查看编辑过的 office 文件的历史版本,新版本 WPS 可以在配置工具-备份清理找到,2019 年旧版本 WPS 可以在新建任意 office 文件-文件-选…

云上攻防--云原生Docker逃逸--特权逃逸--危险挂载--漏洞逃逸

云上攻防–云原生&&Docker逃逸–特权逃逸–危险挂载–漏洞逃逸 目录标题 云上攻防--云原生&&Docker逃逸--特权逃逸--危险挂载--漏洞逃逸Docker介绍判断Docker环境容器逃逸-特权模式容器逃逸-危险挂载挂载DockerSocket逃逸挂载宿主机procfs逃逸 容器逃逸-Docker…

年轻人2023消费图鉴,媒介盒子为你揭秘

回顾近一年的消费,发现大家差不多都是“扣扣嗖嗖的花了很多钱”,如果总结2023年的大众消费关键词,那一定是更加“理性”,据艾瑞咨询《2023年中国消费者洞察白皮书》显示,“精细化”成为2023年的消费关键词,…

数字战场上的坚固屏障:雷池社区版(WAF)

黑客的挑战 智能语义分析算法: 黑客们常利用复杂技术进行攻击,但雷池社区版的智能语义分析算法能深入解析攻击本质,即使是最复杂的攻击手法也难以逃脱。 0day攻击防御: 传统防火墙难以防御未知攻击,但雷池社区版能有效…

树莓派非常实用的程序-2 vcgencmd

vcgencmd 工具用于从Raspberry Pi上的VideoCore GPU输出信息。您可以在 https://github.com/raspberrypi/userland/tree/master/host_applications/linux/apps/gencmd[Github].上找到 vcgencmd 实用程序的源代码。要获取支持的所有 vcgencmd 命令的列表,请使用 vcge…

windows系统下postgresql数据库迁移

1、先停掉postgresql服务。任务管理器中找到postgresql服务,选中右键停止。 2、复制C:\zprogram\路径下的pgsql文件夹到E:\zprogram\路径下。 就是把pgsql文件夹从C盘zprogram文件夹挪到E盘zprogram文件夹中。 3、windowsR键,输入regedit,打…

《软件方法》强化自测题-分析(7)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 按照业务建模、需求、分析、设计工作流考察,答案不直接给出,可访问自测链接或扫二维码自测,做到全对才能知道答案。 知识点见《软件方法》&#x…

Linux 常用指令汇总

Linux 常用指令汇总 文章目录 Linux 常用指令汇总[toc]前言一、文件目录指令pwd 指令ls 指令cd 指令mkdir 指令rmdir 指令tree 指令cp 指令rm 指令mv 指令cat 指令more 指令less 指令head 指令tail 指令echo 指令> 指令>> 指令 二、时间日期指令date 指令cal 指令 三、…

PayPal账号被关联!跨境卖家如何自救?关于PayPal防关联你不得不知道的事!

很多跨境卖家的支付平台都会选择 PayPal,但是 PayPal 账号在使用过程中也经常会遇见关联,风控等问题,这时候为了保护我们的 PayPal 账号安全,防关联就很重要。今天龙哥就分享一些关于 PayPal 防关联的内容,希望能够帮助…

windows安装运行Apache James(基于guide的版本)

下载地址 下载列表 https://james.apache.org/download.cgi 直接下载基于guide版本 https://www.apache.org/dyn/closer.lua/james/server/3.8.0/james-server-jpa-guice.zip 设置签名 解压,并切换到james-server-jpa-guice目录下,在powershellli执行…

【工具使用】VS Code设置字宽垂直标尺

一,简介 在编写代码时,每行写的代码过长,会导致查看代码不方便。所以如果能够有一条线提示宽度就好了,如下图所示: 本文就介绍如何在VS Code中添加这条提示线,供参考。 二,具体方法 settin…

Flink standalone集群部署配置

文章目录 简介软件依赖部署方案二、安装1.下载并解压2.ssh免密登录3.修改配置文件3.启动集群4.访问 Web UI 简介 Flink独立模式(Standalone)是部署 Flink 最基本也是最简单的方式:所需要的所有 Flink 组件, 都只是操作系统上运行…

docker搭建部署mysql并挂载指定目录

Docker是一种轻量级、可移植的容器化平台,可以简化应用程序的部署和管理。在本文中,我们将探讨如何使用Docker来搭建和部署MySQL数据库,并将数据和配置文件挂载到外部目录,以实现数据持久化和方便的配置管理。 1: 安装Docker 首…

docker+jmeter实现windows作为主控机,linux作为负载机的分布式压测环境搭建

dockerjmeter实现windows作为主控机,linux作为负载机的分布式压测环境搭建 1、搭建环境说明2、windows主控机安装Jmeter3、linux负载机安装Jmeter3.1、安装docker环境3.2、使用docker安装jmeter 4、windows主控机分发测试任务 1、搭建环境说明 准备一台windows主机…

element input组件自动失去焦点问题解决

最近在 Vue3 ElementPlus 中,使用 el-input 组件时,如果设置了 v-model,那么在每次改变内容后后,input 会自动失去焦点,这样会导致用户无法输入多个字符。 一、问题原因 如上图所示,配置项的 Name 和 Cod…

Zookeeper设计理念与源码剖析

Zookeeper 架构理解 整体架构 Follower server 可以直接处理读请求,但不能直接处理写请求。写请求只能转发给 leader server 进行处理。最终所有的写请求在 leader server 端串行执行。(因为分布式环境下永远无法精确地确认不同服务器不同事件发生的先后…

网卡高级设置-提高网络环境

网卡高级设置,提高网络质量排除一些连接问题 一、有线网卡 1、关闭IPv6; 可以关闭协议版本6,因为它会引起一些网络连接问题,而且现在几乎用不到IP6。 2、关闭节约电源模式; 右击计算机->设备->设备管理器-&…

探索AI技术的奥秘:揭秘人工智能的核心原理

目录 前言 学习AI要看的第一本书 人工智能应当以人为本 史蒂芬卢奇(Stephen Lucci) 萨尔汗M穆萨(Sarhan M . Musa) 丹尼科佩克(Danny Kopec)(已故) 通晓六点,明白…