文本处理工具grep及sed

news2024/9/21 20:39:54

文章目录

  • 一、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.coloradmin.cn/o/1696691.html

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

相关文章

乡村振兴的乡村文化传承与活化:活化乡村传统文化,传承乡村文化基因,打造具有文化魅力的美丽乡村

目录 一、引言 二、乡村文化的独特价值与现状 三、活化乡村传统文化的策略 1、挖掘乡村文化资源 2、创新文化表达方式 3、加强文化产业发展 四、传承乡村文化基因的途径 1、加强文化教育 2、培育文化人才 3、弘扬文化精神 五、打造具有文化魅力的美丽乡村 1、规划乡…

输入输出(1)——C++的输入输出概述

目录 一、C的输入输出 (一) C的输入输出 (二)C语言的scanf和printf 二、C的输入输出流 (一) iostream类库中有关的类 (二) iostream.h头文件的流对象和重载运算符 一、C的输入输出 (一) C的输入输出 之前用到的输入输出,都是以终端…

最近5星好评的华为的书《常变与长青》

常变与长青 (豆瓣) 作者简介 郭平,1988年加入华为,历任产品开发部项目经理、供应链总经理、总裁办主任、管理工程部总裁、企业发展部总裁、终端公司董事长兼总裁、公司轮值CEO、财经委员会主任、公司副董事长、轮值董事长等职务,现任公…

Science 基于尖峰时序编码的模拟神经触觉系统,可实现动态对象分类

快速处理和有效利用手与物体交互过程中产生的动态触觉信号(例如触摸和抓握)对于触觉探索和灵巧的物体操作至关重要。将电子皮肤(e-skins)推进到模仿自然触觉的水平,是恢复截肢者和瘫痪患者丧失的功能的可行解决方案&am…

IDE上传本地仓库到GitHub

IDE上传本地仓库到GitHub 1、选择远程仓库平台2、下载安装Git3、IDE集成Git4、本地项目上传GitHub 1、选择远程仓库平台 1.1、注册远程仓库平台 常见的远程仓库托管平台有: 1)GitHub 域名:https://github.com 介绍:GitHub是全球最…

CAD二次开发(4)-编辑图形

工具类:EditEntityTool.cs using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Th…

等保2.0看这一篇就够了

一、等级保护介绍 1.1什么是等级保护 网络安全等级保护是指对国家重要信息、法人和其他组织及公民的专有信息以及信息和存储、传输、处理这些信息的信息系统分等级实行安全保护,对信息系统中使用的信息安全产品实行按等级管理,对信息系统中发生的信息安…

有人物联网4G模块【WH-LTE-7S1】超简单上云流程完整版~!(一)

目录 前言一、所需环境二、使用步骤1.官方资料包获取2.硬件连接3.云平台配置 四、结尾 前言 废话不多说直接上干货 一、所需环境 1、有人家的WH-LTE-7S1(带配套底板)。 2、串口工具(TTL或USB485)。二、使用步骤 1.官方资料包获…

颜色值进制转换

颜色值进制转换 专业的和非专业程序员在编程时都碰到过颜色值的表达式。特别是在编制网页和设计界面时,都要选择颜色。各语言的颜色值表达式就两种,十六进制的颜色值hex$和十进制的RGB格式。现成的调色板颜色表也是这两种格式。写代码时会遇到写颜色值码…

NVIDIA Jetson 上编译opencv 4.9.0

直接上命令 cmake .. \ -DCMAKE_C_COMPILER/usr/bin/gcc-7 -DCMAKE_CXX_COMPILER/usr/bin/g-7 \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_INSTALL_PREFIX/usr/local \ -DOPENCV_ENABLE_NONFREE1 \ -DBUILD_opencv_python21 \ -DBUILD_opencv_python31 \ -DCUDA_TOOLKIT_ROOT_DIR…

使用Django框架搭建Web应用

文章目录 简介安装Django创建一个Django项目创建一个Django应用编写视图配置URL运行开发服务器总结与拓展数据库集成管理后台表单处理模板引擎安全性 简介 Django 是一款基于 Python 语言的开源 Web 应用框架,采用了 MVC(模型-视图-控制器)设…

运筹说 第115期 | 排队论经典例题讲解

通过前几期的学习,我们已经学会了排队论的基本概念、生灭过程和Poisson过程,等待制排队模型、混合制排队模型、其他排队模型以及排队系统优的定义与相关求解方法。在实际工作中,我们能发现排队论在经济管理中有着许多应用,本期小编…

神经网络的工程基础(一)——利用PyTorch实现梯度下降法

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下:regression2chatgpt/ch06_optimizer/gradient_descent.ipynb 本文将讨论利用PyTorch实现…

高斯过程学习笔记

目录 基础知识 例子 推荐 A Visual Exploration of Gaussian Processes (distill.pub) AB - Introduction to Gaussian Processes - Part I (bridg.land) 基础知识 高斯过程回归(Gaussian Process Regression) - 知乎 (zhihu.com) 高斯过程&#x…

VS2022上通过C++绘图库ROOT库绘制一个3D曲面图

ROOT库提供了强大的交互式图形功能。通过使用ROOT库的TCanvas和TApplication类,可以创建一个交互式的图形窗口,可以对图形进行缩放、平移、旋转等操作,并且可以通过鼠标和键盘与图形进行交互,这点实在是太厉害了,也就是…

贪心算法4(c++)

过河的最短时间 题目描述 输入 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过,如果…

Java进阶学习笔记21——泛型概念、泛型类、泛型接口

泛型&#xff1a; 定义类、接口、方法的时候&#xff0c;同时声明了一个或者多个类型变量&#xff08;如: <E>&#xff09;,称之为泛型类、泛型接口、泛型方法&#xff0c;我们统称之为泛型。 说明这是一个泛型类。 如果不使用泛型&#xff0c;我们可以往ArrayList中传…

【多线程开发 2】从代码到实战TransmittableThreadLocal

【多线程开发 2】从代码到实战TransmittableThreadLocal 本文将从以下几个点讲解TransmittableThreadLocal(为了方便写以下简称ttl)&#xff1a; 前身 是什么&#xff1f; 可以用来做什么&#xff1f; 源码原理 实战 前身 ThreadLocal 要了解ttl就要先了解Java自带的类…

【C语言】指针作为参数(传值调用vs传址调用)

前言 在前面讲了那些指针相关的内容后&#xff0c;是时候探讨一下指针有什么作用了。 在C语言中&#xff0c;指针有多种各不相同的应用&#xff0c;在本篇文章中&#xff0c;我们探讨一下指针作为函数参数的作用&#xff08;对比传值与传址两种不同函数调用方式&#xff09;。…

解决git克隆项目出现fatal无法访问git clone https://github.com/lvgl/lvgl.git

Windows 11系统 报错 $ git clone https://github.com/lvgl/lvgl.git Cloning into lvgl... fatal: unable to access https://github.com/lvgl/lvgl.git/: Failed to connect to github.com port 443 after 21141 ms: Couldnt connect to server 解决方法 git运行这两段代码…