第四章Shell编程之正则表达式与文本处理器

文本处理有三剑客:grep sed awk

通配符:只能匹配文件名与目录名,不能匹配文件的内容

*匹配任意一个或者多个字符

?匹配任意一个字符(就是匹配单个字符)

[ ] 匹配范围内的任意单个字符

正则表达式:有一类特殊字符以及文本字符所编写的一种模式,用来处理文本当中的内容,其中的一些字符不表示字符的字面含义,表示控制或者通配的功能

基本正则表达式

字符匹配,元字符

. 匹配任意的单个字符,可以是一个汉字

\表示转义符,\.就是一个点 

 ()括号表示分组的意思

\(\),就是括号

[ ] 匹配指定范围内的任意单个字符

[^]取反,指定范围之外的

[[:space:]]包含空格,tab键,换行的空格,回车的空格

[[:blank:]] 空白字符(空格和tab制表符)

通配符不能完全匹配大小写, 正则可以

 

表示匹配不是a.txt .是或者 z.txt的文件(除了不匹配a或者z,其他都匹配)

正则表达式中表示次数的表达式

*匹配前面的字符任意次,0次也行,无数次也行,有多少匹配多少,没有也行

 .*匹配任意长度的字符,至少要有一次,不包括0次

\?匹配前面的字符0次或者一次,可有可无

\+ 匹配前面的字符至少1次,最多可以无数次

\{n\}匹配前面的字符等于n次,必须连续出现才能匹配

 \{m,n\}匹配前面的字符,最少m次,最多n次

\{,n\}匹配前面的字符,最多n次(只要出现几次,出现都算,除非没有,只要前面的字符有,都算)

\{n,\}匹配前面的字符至少n次

位置锚定:

^ 以什么为开头,在模式的左侧  ^root

 $ 以什么为结尾,在模式的右侧 r$

^root$ 用于匹配整行,而且整行中只有以后个root

^$ / ^[[:space:]]$  匹配空行

 

词首锚定 \< 或者 \b

 词尾锚定 \> 或者 \b 

匹配整个单词

 分组()

\| 表示逻辑或 

扩展正则就是不写\ 

但是有要求 grep -E 或者egrep

练习一条命令显示出文件内容 

练习

显示/etc/passwd中以sh结尾的行

查找/etc/inittab中含有“以s开头,并以d结尾的单词”模式的行

查找ifconfig命令结果中的1-255之间的整数

显示/var/log/secure文件中包含“Failed”或“FAILED”的行

在/etc/passwd中取出默认shell为bash的行

高亮显示passwd文件中冒号,及其两侧的字符

以长格式列出/etc/目录下以ns开头、.conf结尾的文件信息

sed

sed:类似于vim就是一个文本编辑器,按行来编辑和处理

主要作用是对文本内容进行增删改查

sed可以支持正则表达式,支持扩展正则表达式

sed的原理:读取 执行 显示 三个过程

读取:读取文本内容后,读取到的内容存放到临时的缓冲区,模式空间

执行:在模式空间,根据读取的文本内容,按行执行,除非指定引号,否则会遍历所有行,从上往下执行

显示:执行完后,把执行结果打印,如果要改变生效,模式空间被修改的内容会写入到指定的文件当中,只是操作,但是不最终写入文件,只展示结果,展示完后,模式空间的数据立即删除

***sed 文本内容处理工具,文件过大怎么办?

1.大型文件先分割的好

2.中型文件

sed的实际操作

sed -e '操作'  文件1 -e '操作' 文件2

只对一个文件操作,可以不加-e

常用选项

-e 条件操作选项

-f 指定脚本文件来处理输入的文件内容,把命令写在脚本里,用脚本里的命令来处理第二个文件里面的内容

-i 立即生效 慎用

-n 显示script处理之后的结果(禁止sed的默认输出)

操作符

s 替换指定字符

d 删除指定的行

a,增加在当前的下面插入指定内容

i,增加,在指定行的上面插入指定的内容

c,替换,整行替换

y,替换字符,但是替换前后的字符长度必须一致

p,打印

r,扩展正则

sed的核心就是改,删 ,增 查是没有grep强大 

两种写法

 

sed自己有一个默认的输出,p打印会额外再来一行

 -n 显示script处理之后的结果(禁止sed的默认输出)

显示行号

即显示行号,也有内容

打印指定行,寻址打印

直接打印最后一行

行号的范围打印

答应1到3行

第二行到最后一行

打印2到4行

打印2行和最后一行

奇数偶数行打印

偶数

奇数

文本过滤模式

1.对包含指定字符串的内容进行打印

应用基础正则表达式进行打印

 扩展正则

***怎么样不进入文件就可以删除文件当中的内容,免交互删除?

指定行号进行删除

删除第三行,打印剩余的行

删除1到三行

删除1行和三行

匹配字符内容删除

 除了含c的,其他行删除 !:取反的意思 

正则表达式删除

删除空行

替换 

s 替换字符串

c整行替换

y,单字符替换,前后长度要保持一致

 字母字符大小写替换

首字母

全文

全部换小写

l&转换成小写的特殊符号,在使用时,需要转义符\

 u&转换成大写的特殊符号,在使用时,需要转义符\

g 全部替换,如果不加,只会更改首字符

整行替换

y单字符替换

增加

a 在下一行添加

i 在上一行添加·

r 在行后读入指定文件内容

sed命令当中字符串的位置进行交换

 后面1 2 3相当于文本内容分组之后输出的位置 谁是第一位 第二位 第三位

-f 指定脚本文件来处理输入的文件内容,把命令写在脚本里,用脚本里的命令来处理第二个文件里面的内容

空格换成下划线

文件1

脚本文件

****取版本号

取日志范围 

awk

awk,是功能最强大的文本工具,也是按行来进行操作,对行操作完之后,可以根据指定命令来进行取列

awk的分割符,他的默认分隔符是空格,或者tab键,多个空格,它会自动压缩成一个

用法:awk选项 '模式或者条件{操作}' 文件

选项:-F 指定分割符,如果是空格,则不需要加F

        -v 变量赋值

打印第一列

打印多列

 答应文本里所有内容

awk 常用内置变量

$0 打印所有内容

$n 处理行的第几列

NR 处理行的行号

NF 处理当前行的字段个数,$NF就表示最后一个字段

FS 列分割符,指定文本的分割符,和F作用一直

    F:分割符  FS=":"

OFS 输出文本的分割符

RS 输出分割符为回车

内置变量$n要加$,表示列的;其他的内置变量,不用加$,更不能用引号,也不能用括号,否则会被当成字符串处理

awk的打印功能   查看

为0不打印

默认为1,可以不加,为打印所有

只打印行号

 

 打印行号,打印所有内容

打印第三行

 打印1-3行

  打印1和3行

 

 

偶数行打印

 奇数行打印

awk运算,也支持小数运算

 **和^表示求幂

 

***awk的内置函数:getline

1.如果getline左右两侧没有重定向符号(<>),或者没有(|)时,awk会先读第一行,但是如果加了getline,跳过第一行,读取第二行

 

***如果两边有重定向或者管道符,getline作用于定向输入文件

33.txt 文件内容,重定向输出到22.txt文件

文本过滤打印

awk 以root为开头的行

 包含x的行

BEGIN模式

 在对文件进行操作之前,会先执行BEGIN{..}模式条件或者操作命令

中间{..}是真正的用于处理文件的命令

END{..}结束语句,一般都是打印执行结果

***当前文件有多少行?

-v变量赋值,指的是改变分割符

 

 

 

 

 

 

 

 

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

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

相关文章

ONNX 推理,精度下降

先看代码&#xff1a; img cv2.imread("65.jpg") img1 img.copy() img2 img.copy() img1 - 112 img1 img1.astype(np.float32) img2 np.float32(img2) img2 - 112 现象&#xff1a;在使用 img1 这种处理方式时&#xff0c;推理结果异常&#xff0c;起码掉点…

AUTOSAR CP标准的RTE和BSW各模块的设计及开发工作

AUTOSAR&#xff08;Automotive Open System Architecture&#xff09;是一种开放的汽车电子系统架构标准&#xff0c;旨在提供一种统一的软件架构&#xff0c;以实现汽车电子系统的模块化和可重用性。 AUTOSAR标准中的两个重要模块是RTE&#xff08;Runtime Environment&…

智能优化算法——灰狼优化算法(PythonMatlab实现)

目录 1 灰狼优化算法基本思想 2 灰狼捕食猎物过程 2.1 社会等级分层 2.2 包围猎物 2.3 狩猎 2.4 攻击猎物 2.5 寻找猎物 3 实现步骤及程序框图 3.1 步骤 3.2 程序框图 4 Python代码实现 5 Matlab实现 1 灰狼优化算法基本思想 灰狼优化算法是一种群智能优化算法&#xff0c;它的…

【已解决】ModuleNotFoundError: No module named ‘timm.models.layers.helpers‘

文章目录 错误信息原因解决方法专栏&#xff1a;神经网络精讲与实战AlexNetVGGNetGoogLeNetInception V2——V4ResNetDenseNet 错误信息 在使用timm库的时候出现了ModuleNotFoundError: No module named timm.models.layers.helpers’的错误&#xff0c;详情如下&#xff1a; …

大语言模型举例和相关论文推荐

大语言模型如火如荼。甚至已经爆发了“百模大战” 2023年&#xff0c;“百模大战”&#xff0c;一触即发。 因为工作需要&#xff0c;我除了参加行业、企业、研究机构的发布会和闭门会&#xff0c;还需要基于自身的业务&#xff0c;不断了解最新的AI大模型和AIGC应用。 2024…

JavaScript——基础知识及使用

初识 JavaScript JavaScript (简称 JS) 是世界上最流行的编程语言之一.一个脚本语言, 通过解释器运行.主要在客户端(浏览器)上运行, 现在也可以基于 node.js 在服务器端运行. JavaScript 的能做的事情: 网页开发(更复杂的特效和用户交互)网页游戏开发服务器开发(node.js)桌…

Ceph的安装部署

文章目录 一、存储基础1.1 单机存储设备1.2 单机存储的问题1.3分布式存储&#xff08;软件定义的存储 SDS&#xff09; 二、Ceph 简介2.1 Ceph 优势2.2 Ceph 架构2.3 Ceph 核心组件2.4 Pool、PG 和 OSD 的关系&#xff1a;2.5 OSD 存储后端2.6 Ceph 数据的存储过程2.7 Ceph 版本…

手写Spring框架---MVC实现

目录 预备 自研框架MVC的实现 MVC架构草图&#xff1a; 大致流程 实现思路 自定义注解 JavaBean 请求的拦截-建立DispatcherServlet 责任链处理请求 RequestProcessor矩阵 Render矩阵 预备 在DispatcherServlet&#xff1a; 解析请求路径和请求方法依赖容器&#xf…

前端学习记录~2023.7.17~CSS杂记 Day9

前言一、浮动1、使盒子浮动起来2、清除浮动3、清除浮动元素周围的盒子&#xff08;1&#xff09;clearfix 小技巧&#xff08;2&#xff09;使用 overflow&#xff08;3&#xff09;display: flow-root 二、定位1、定位有哪些2、top、bottom、left 和 right3、定位上下文4、介绍…

ACME申请SSL证书

1.开放443端口 firewall-cmd --permanent --add-port443/tcp # 开放443端口 firewall-cmd --reload # 重启防火墙(修改配置后要重启防火墙)2.安装ACME # 安装acme curl https://get.acme.sh | sh -s email你的邮箱地址 # 别名 alias acme.sh~/.acme.sh/acme.sh3.使用ACME申请…

【面试笔试避坑指南】一

从这篇文章开始 进行笔试的训练环节&#xff0c;我会在 本专栏详细介绍笔试的易错点&#xff0c;帮助大家精准避坑。 1.有如下一段代码&#xff08;unit16_t为2字节无符号整数&#xff0c;unit8_t位1字节无符号整数&#xff09;&#xff1b; 请问x.z.n在大字节序和小字节序机器…

【MySQL异常解决】MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案

MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案 一、背景描述二、报错原因三、解决方案3.1 升级 MySQL 数据库版本3.2 修改字符集为 一、背景描述 从服务器MySQL中导出数据为SQL执行脚本后&#xff0c;在本地电脑执行导出的SQL脚本&#xff0c;…

【HarmonyOS】Stage模型二维码/条码生成与解析

HarmonyOS的官方API中提供了QRCode组件&#xff08;QRCode-基础组件-组件参考&#xff08;基于ArkTS的声明式开发范式&#xff09;-ArkTS API参考-HarmonyOS应用开发&#xff09;&#xff0c;这个组件有个缺点只能用于显示二维码&#xff0c;无法显示条码与解析码内容&#xff…

【UE】运行游戏时就获取鼠标控制

问题描述 我们经常在点击运行游戏后运行再在视口界面点击一下才能让游戏获取鼠标控制。其实只需做一个设置就可以在游戏运行后自动获取鼠标控制。 解决步骤 点击编辑器偏好设置 如下图&#xff0c;点击“播放”&#xff0c;再勾选“游戏获取鼠标控制” 这样当你运行游戏后直…

idea创建spark教程

1、环境准备 java -version scala -version mvn -version spark -version 2、创建spark项目 创建spark项目&#xff0c;有两种方式&#xff1b;一种是本地搭建hadoop和spark环境&#xff0c;另一种是下载maven依赖&#xff1b;最后在idea中进行配置&#xff0c;下面分别记录两…

ELK-日志服务【redis-配置使用】

目录 环境 【1】redis配置 【2】filebeat配置 【3】对接logstash配置 【4】验证 【5】安全配置&#xff1a;第一种&#xff1a;kibana-nginx访问控制 【6】第二种&#xff1a;在ES-主节点-配置TLS 【7】kibana配置密码 【8】logstash添加用户密码 环境 es-01,kibana 1…

中国国债发行数据集(2002-2023)

国债是由国家发行的债券&#xff0c;由于国债的发行主体是国家&#xff0c;所以它具有最高的信用度&#xff0c;被公认为是最安全的投资工具。国债按照交易市场的不同分为三类&#xff0c;即银行间市场国债、交易所市场国债和柜台市场国债&#xff1b;按照交易方式的不同分为三…

vue树组件循环表格

最近做项目需要实现循环表格这个需求&#xff0c;其中实用到了循环组件&#xff0c;特此记录一下&#xff0c;这是需要实现的功能&#xff0c;如下图&#xff1a; vue中实现组件循环 父组件 <template><div><ul><li v-for"(item,index) in aside…

【HCIA】10.VLAN间通信

VLAN间通信的解决方法 使用路由器的物理接口 路由器三层接口作为网关&#xff0c;转发本网段前往其它网段的流量。路由器三层接口无法处理携带VLAN Tag的数据帧&#xff0c;因此交换机上联路由器的接口需配置为Access。路由器的一个物理接口作为一个VLAN的网关&#xff0c;因此…

2023-07-14:讲一讲Kafka与RocketMQ中存储设计的异同?

2023-07-14&#xff1a;讲一讲Kafka与RocketMQ中存储设计的异同&#xff1f; 答案2023-07-14&#xff1a; 在Kafka中&#xff0c;文件的布局采用了Topic/Partition的方式&#xff0c;每个分区对应一个物理文件夹&#xff0c;且在分区文件级别上实现了顺序写入。然而&#xff0…