文本处理工具grep及sed

文章目录

  • 一、grep文本处理工具
  • 二、sed文本处理工具
    • 基本用法
    • sed脚本格式
    • 搜索替代


一、grep文本处理工具

选项含义
-color对匹配到的文本着色显示
-m +次数匹配到规定的次数后停止
-v显示不被命令匹配到的行,即取反
-i忽略字符大小写
-n显示匹配的行号
-c统计匹配的行数
-o仅显示匹配到的字符串
-q静默模式,不输出任何信息,多用于写脚本
-Aafter,将匹配到的行的后n行显示出来
-Bbefore,将匹配到的行的前n行显示出来
-Ccontext,将匹配到的行的前后n行显示出来
-e实现多个选项间的逻辑or关系
-w匹配整个单词
-E 等价于egrep启用扩展正则表达式
-F不支持正则表达式,相当于fgrep
-f处理两个文件相同内容 把第一个文件作为匹配条件
-r递归目录,但不处理软链接
-R递归目录,但处理软链接

在这里插入图片描述
在这里插入图片描述
思考题:统计当前主机的连接状态
在这里插入图片描述

二、sed文本处理工具

sed 即 Stream EDitor,和 vi 不同,sed是行编辑器。
在这里插入图片描述
Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快

基本用法

选项含义
-n不输出模式空间内容到屏幕,即不自动打印
-e多点编辑
-f FILE从指定文件中读取编辑脚本
-r, -E使用扩展正则表达式
-i.bak备份文件并原处编辑

注意:
-ir 不支持
-i -r 支持
-ri 支持
-ni 会清空文件

在这里插入图片描述
在这里插入图片描述

支持重定向,下图是重定向输入
在这里插入图片描述

sed脚本格式

'地址+命令’组成
地址:
1.不给地址:对全文进行处理
2.单地址:
#:指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行,正则表达式
3. 地址范围:
#,# 从#行到第#行,3,6 从第3行到第6行
#,+# 从#行到+#行,3,+4 表示从3行到第7行
/pat1/,/pat2/ 第一个正则表达式 到 第二个正则表达式之间的行
#,/pat/ 从#号行为开始找到 pat为止 3 , /^r/
/pat/,# 从pat开始直到找到#号为止
4. 步进:~
1~2 奇数行
2~2 偶数行
sed -n ‘n;p’ file1 #打印偶数行
sed -n ‘2,${n;p}’ file1

命令:

  • a:增加,在当前行下面增加一行指定内容。
  • c:替换,将选定行替换为指定内容。
  • d:删除,删除选定的行。
  • i:插入,在选定行上面插入一行指定内容。
  • p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII码输出。其通常与“-n”选项一起使用。
  • s:替换,替换指定字符。
  • y:字符转换。
  • -e 或–expression=:表示用指定命令或者脚本来处理输入的文本文件。
  • -f 或–file=:表示用指定的脚本文件来处理输入的文本文件。
  • -h 或–help:显示帮助。
  • -n、–quiet 或 silent:表示仅显示处理后的结果。
  • -i:直接编辑文本文件。
  • -r 使用扩展正则表达式

在这里插入图片描述
显示文件的第四行
在这里插入图片描述
显示文件的3-5行
在这里插入图片描述
显示文件的奇数行
在这里插入图片描述
解释:
1.sed 读取 /etc/passwd 文件的第一行。
2.p 命令打印当前行(第一行)。
3.n 命令读取下一行(第二行),但不打印。
4.sed 继续读取文件的第三行。
5.p 命令打印当前行(第三行)。
6.n 命令读取下一行(第四行),但不打印。
重复步骤4-6,直到文件结束。
显示偶数行,则把两者调换位置即可,但需要注意两者都为命令,需要将其用分号隔开。
在这里插入图片描述
显示奇数行命令解释:
打印 /etc/passwd 文件中从第二行开始的偶数行,直到文件末尾。
‘2,${n;p}’: 是一个sed脚本,包含一个地址范围和两个命令:
2,$: 地址范围,表示从第二行开始到文件末尾。其中 $ 表示最后一行。
n: 读取下一行,但不打印。
p: 打印当前行。
显示奇数行命令执行过程:
1.sed 读取 /etc/passwd 的第一行,但不执行任何操作,因为地址范围从第二行开始。
2.sed 读取第二行。
3.n 命令读取下一行(第三行),但不打印。
4.p 命令打印当前行(第二行)。
5.sed 继续读取第四行。
6.n 命令读取下一行(第五行),但不打印。
7.p 命令打印当前行(第四行)。
8.重复步骤5-7,直到文件结束。

sed支持正则表达式
基本格式 ‘/表达式1/,/表达式2/p’ (不要忘记打印)p 文件名
在这里插入图片描述
匹配方式:
如果有多个复核条件的表达式,先开始找b开头一直找到f开头,然后再重新找b开头,一找到f开头,没有f开头就全显示,重复循环。
如果需要显示几点到几分之间的日志,即可用上述的方法。
示例:sed -n ‘/2018:08:09/,/2018:09:42:37/p’ access_log

奇偶数表示
在这里插入图片描述
-d选项 (删除)
在这里插入图片描述
将第三行删除

-i选项 用于备份,常常用于修改配置文件时,备份原本文件
在这里插入图片描述
-a 追加
在这里插入图片描述
i 表示在第n行插入
c表示替换
在这里插入图片描述
!取反
r后面跟文件名代表插入整个文件

在这里插入图片描述

保存行至指定文件
在这里插入图片描述
‘=’ 开启行号
在这里插入图片描述

搜索替代

s/pattern/string/修饰符
查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
修饰符:

  • g 行内全局替换
  • p 显示替换成功的行
  • w /PATH/FILE 将替换成功的行保存至文件中
  • I,i 忽略大小写
    在这里插入图片描述
    &可以只带之前的内容,在遇到正则表达式时很有用。
    sed ‘s/r…t/&er/g’ /etc/passwd

    在这里插入图片描述
    用()代表分组 \1,\2代表留下的组
    在这里插入图片描述
    正则表达式 (123)(abc)(xyz) 匹配输入字符串,并将其分为三个捕获组:
    第一个捕获组: “123”
    第二个捕获组: “abc”
    第三个捕获组: “xyz”
    替换字符串 /\1/ 引用第一个捕获组的内容 “123”,并删除其他捕获组的内容。
    示例:
    1.提取IP地址
    ifconfig ens33|sed -rn ‘2s/.inet ([0-9.]+) ./\1/p’
    在这里插入图片描述
    .*inet ([0-9.]+) .*: 正则表达式模式,用于匹配包含IP地址的行:
    .*: 匹配任意字符,直到遇到 inet 关键字。
    inet: 匹配字符串 “inet”。
    ([0-9.]+): 匹配IP地址,即由数字和点组成的字符串,并将其捕获到一个组中。
    .*: 匹配IP地址后的任意字符,直到行尾。
    2.删除部分路径
echo /etc/sysconfig/network-scripts/ifcfg-ens33 |sed -nr 's@^(.*)/([^/]+)@\2@p'

s@: 替换命令的语法开始标记,使用 @ 作为分隔符而不是默认的 /。
^(.)/([^/]+): 正则表达式模式,用括号将文件路径分为两个捕获组:
第一个捕获组 (.
): 匹配路径部分,即从开头到最后一个 / 之前的所有字符。
第二个捕获组 ([^/]+): 匹配文件名部分,即最后一个 / 之后的所有字符,直到行尾。

3.提取版本号
grep的方式
在这里插入图片描述
sed的方式在这里插入图片描述

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

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

相关文章

log4j2远程代码执行

漏洞复现 漏洞复现2 这个框架不是web框架了,不是服务器web网站框架了,是java日志框架,就是记录日志信息,每一个程序都有一个日志文件,这个就是java里面记录日志的一个框架,它存在的点也是日志框架那几个代…

我用LLaMA-Factory微调大模型来实现商品评论情感分析,准确率高达91.70%

大家好,我是程序锅。 最近在modelscope上闲逛的时候,在数据集板块发现有一个商品评论情感预测数据集。这个数据集源自一个比赛,它的目的是为了预测电商平台顾客的评论是好评还是差评。 数据示例如下所示(其中0代表差评&#xff…

Go 和 Delphi 定义可变参数函数的对比

使用可变参数函数具有灵活性、重用性、简化调用等优点,各个语言有各自定义可变参数函数的方法,也有通用的处理方法,比如使用数组、定义参数结构体、使用泛型等。 这里总结记录一下 go、delphi 的常用的定义可变参数函数的方式! 一…

基于图卷积网络的人体3D网格分割

深度学习在 2D 视觉识别任务上取得了巨大成功。十年前被认为极其困难的图像分类和分割等任务,现在可以通过具有类似人类性能的神经网络来解决。这一成功归功于卷积神经网络 (CNN),它取代了手工制作的描述符。 NSDT工具推荐: Three.js AI纹理开…

1301-习题1-1高等数学

1. 求下列函数的自然定义域 自然定义域就是使函数有意义的定义域。 常见自然定义域: 开根号 x \sqrt x x ​: x ≥ 0 x \ge 0 x≥0自变量为分式的分母 1 x \frac{1}{x} x1​: x ≠ 0 x \ne 0 x0三角函数 tan ⁡ x cot ⁡ x \tan x \cot x …

C++奇迹之旅:vector使用方法以及操作技巧

文章目录 📝前言🌠 熟悉vector🌉使用vector 🌠构造函数🌉vector遍历 🌠operator[]🌉迭代器 🌠Capacity容量操作🌉 size()🌉 capacity()🌉resize()…

C语言中的七种常用排序

今天&#xff0c;为大家整理了C语言中几种常用的排序&#xff0c;以及他们在实际中的运用&#xff08;有Bug请在下方评论&#xff09;&#xff1a; 一.桶排序 #include <stdio.h> int main() {int book[1001],i,j,t,n;for(i0;i<1000;i)book[i]0;scanf("%d"…

二进制中1的个数c++

题目描述 计算鸭给定一个十进制非负整数 NN&#xff0c;求其对应 22 进制数中 11 的个数。 输入 输入包含一行&#xff0c;包含一个非负整数 NN。(N < 10^9) 输出 输出一行&#xff0c;包含一个整数&#xff0c;表示 NN 的 22 进制表示中 11 的个数。 样例输入 100 …

001集—创建、写入、读取文件fileopen函数——vb.net

此实例为在指定路径下创建一个txt文本文件&#xff0c;在文本文件内输入文字&#xff0c;并弹窗显示输入文字&#xff0c;代码如下&#xff1a; Public Class Form1Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.ClickDim testcontent As Str…

英语学习笔记26——Where is it?

Where is it? 它在那里&#xff1f; 课文部分

springboot+vue+mybatis校园兼职平台+PPT+论文+讲解+售后

社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个学生的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符合自己要…

opencv进阶 ——(五)图像处理之马赛克

一、遍历图像并对每个马赛克区域进行像素化处理 for (int y 0; y < image.rows; y blockSize) {for (int x 0; x < image.cols; x blockSize) {cv::Rect rect cv::Rect(x, y, std::min(blockSize, image.cols - x), std::min(blockSize, image.rows - y));cv::Scal…

新建一个STM32工程(精简版)

一、新建一个STM32工程 二、建立三个文件夹 1、Start文件夹里的东西 &#xff08;1&#xff09;启动文件&#xff1a;STM32入门教程资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm &#xff08;2&#xff09;STM32…

005、API_数据结构

键的数据结构类型&#xff0c;它们分别是&#xff1a; string&#xff08;字符串&#xff09;、hash&#xff08;哈希&#xff09;、list&#xff08;列表&#xff09;、set&#xff08;集合&#xff09;、zset&#xff08;有序集 合&#xff09;&#xff0c;这些只是Redis对外…

从0开始学统计-蒙彼利埃尔悖论与条件概率

1.什么叫均衡可比&#xff1f; "均衡可比"指的是在进行比较时&#xff0c;确保所比较的对象或情况具有相似的特征和条件&#xff0c;以保持比较的公正性和准确性。这个概念通常应用于研究设计和数据分析中&#xff0c;以确保比较结果的可信度和有效性。 在研究中&a…

P6160 [Cnoi2020] 向量

[Cnoi2020] 向量 题目背景 向量(vector)&#xff0c;指具有大小(Magnitude)和方向(Direction) 的量。 与向量对应的量叫做数量(Scalar)&#xff0c;数量只有大小&#xff0c;没有方向。 对于 Cirno 来说&#xff0c;整天环绕氷屋的旋转 Sangetsusei 们是向量而不是数量。 Sun…

【JavaSE】/*类和对象(上)*/

目录 一、什么是类&#xff0c;什么是对象 二、类和对象的关系 三、学习类和对象的目的 四、怎样创建一个类 4.1 语法形式 4.2 创建示例 示例一&#xff1a;日期对象 示例二&#xff1a;小狗对象 示例三&#xff1a;学生对象 4.3 注意事项 4.4 修改public修饰的主类…

信号量——多线程

信号量的本质就是一个计数器 在多线程访问临界资源的时候&#xff0c;如果临界资源中又有很多份分好的资源&#xff0c;那么就可以通过信号量来表示里面还有多少份资源&#xff0c;且每份资源只有一个线程可以访问 线程申请信号量成功&#xff0c;就一定有一份资源是你的&…

python机器学习及深度学习在空间模拟与时间预测

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247628504&idx2&sn6fe3aeb9f63203cfe941a6bb63b49b85&chksmfa77a9e5cd0020f3aa4f01887e75b15096a182c2b5b42c1044787aa285c650f1469a0ef28aec&token2124656491&langzh_CN&scene21#we…

网络模型—BIO、NIO、IO多路复用、信号驱动IO、异步IO

一、用户空间和内核空间 以Linux系统为例&#xff0c;ubuntu和CentOS是Linux的两种比较常见的发行版&#xff0c;任何Linux发行版&#xff0c;其系统内核都是Linux。我们在发行版上操作应用&#xff0c;如Redis、Mysql等其实是无法直接执行访问计算机硬件(如cpu&#xff0c;内存…