Linux- 系统随你玩之--文本处理三剑客--grep继任者awk

news2024/10/6 6:44:28

文章目录

  • 1、sed概述
    • 1.1、 与vim等编辑器的区别:
    • 1.2、sed工作原理
    • 1.3 、sed数据处理原理
    • 1.4 、正则表达式概念
  • 2、 sed语法和常用选项
    • 2.1、语法:
    • 2.2、sed常用内部命令
    • 2.3、参数:
  • 3、 sed + 正则表达式(定位)
    • 3.1 、数字定址
    • 3.2、常用实例
      • 3.2.1、指定行 字符串** 内容替换
      • 3.2.2、限定区间行数 字符串内容替换
      • 3.2.3、指定区间行 字符串内容替换
      • 3.2.4、指定起始行及倍数行 字符串内容替换
      • 3.2.5、指定起始行及跨行规则 字符串内容替换
      • 3.2.6、指定起始行及跨行规则 字符串内容替换
      • 3.2.7、指定起始行及跨行规则 字符串内容替换
    • 3.3、正则表达式
      • 3.3.1、解释
      • 3.3.2、操作实例
  • 4、sed使用技巧
    • 4.1 、$= 统计文本有多少行
    • 4.2 、行内容迁移
    • 4.3、 将匹配的内容另存为新文件
  • 5、练习实操
    • 5.1、实操题目
    • 5.2、 基于题目练习例子

1、sed概述

sed 全名为 stream editor,流编辑器,是贝尔实验室的 Lee E.McMahon 在 1973 年到 1974 年之间开发完成,目前可以在大多数操作系统中使用,sed 的出现作为 grep 的继任者。

1.1、 与vim等编辑器的区别:

  • vim 文本编辑器: 编辑对象是文件;
  • sed 行编辑器:编辑对象是文件中的行;

sed 是一种非交互式编辑器(即用户不必参与编辑过程),它使用预先设定好的编辑指令对输入的文本进行编辑,完成之后再输出编辑结构。

1.2、sed工作原理

sed 本身一次处理一行内容。

  1. 处理的时候会把当前处理的行内容存储在临时缓冲区中,成为"模式空间",
  2. 接着用sed命令处理缓冲区中的内容,处理完成后,会把缓冲区的内容输出到屏幕。
  3. 接着处理下一行内容,如此不断重复此过程,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

1.3 、sed数据处理原理

在这里插入图片描述

1.4 、正则表达式概念

使用sed 主要就是使用正则模式进行匹配,所以需要了解正则表达式相关内容。

正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式 我会单独写一篇内容讲解,此外就不在介绍。

2、 sed语法和常用选项

2.1、语法:

调用sed命令有两种形式:
sed [options] ‘command’ file(s)
sed [options] -f scriptfile file(s)

sed [options]{command}[flags][filename]    
#中括号内容必有 大括号内容可有可无
sed  # 执行命令
[options]  # 命令选项
{command}[flags]    # sed内部选项和参数
[filename]     # 文件
命令选项
-e script 将脚本中指定的命令添加到处理输入时执行的命令中  多条件,一行中要有多个操作
-f script 将文件中指定的命令添加到处理输入时执行的命令中
-n        抑制自动输出
-i        编辑文件内容
-i.bak    修改时同时创建.bak备份文件。
-r        使用扩展的正则表达式
!         取反 (跟在模式条件后与shell有所区别)

2.2、sed常用内部命令

a :  在匹配行后添加一行或多行内容
c : 用新文件修改(替换)当前行中的文本
d : 删除
g : 全局执行
i :  在匹配的行之前插入文本
p   打印
r : 从以外文件中读相关内容,写到相关行之后
s : 用一个字符替整体替换成另外一个字符(查找替换)
w : 匹配到的行写入一个新的文件之中
y : 将字符转换成一个新的字符
i : 与s指令配合一起使用时,则是忽略大小写的作用

flags
数字             表示新文本替换的模式
g:             表示用新文本替换现有文本的全部实例
p:             表示打印原始的内容
w filename:     将替换的结果写入文件

2.3、参数:

  • e : 允许多项编辑
  • n : 取消默认输出
  • i : 就地编辑文本
  • r : 支持扩展正则表达式(sed中的正则表达式必须放在两个//中间)
  • f : 指定定位规则的文件

3、 sed + 正则表达式(定位)

3.1 、数字定址

默认情况下sed会对每一行内容进行匹配、处理、输出,某些情况不需要对处理的文本全部编辑,只需要其中的一部分,比如1-5行,偶数行,或者是包含"word"字符串的行,这种情况下就需要我们去定位特定的行来处理,而不是全部内容,这里把这个定位指定的行叫做"定址"。
数字定址其实就是通过数字去指定具体要操作编辑的行,

数字定址有多种方式,每种方式都有不同的应用场景,下边以举例的方式来描述每种数字定址的用法。
固定定位
[root@localhost ~]# sed -n ‘3p’ 1.txt
范围定位
[root@localhost ~]# sed -n ‘1,3p’ 1.txt

3.2、常用实例

3.2.1、指定行 字符串** 内容替换

sed –n '1s/word/china/' message

命令说明:将第1行中word字符串替换为china,其它行如果有word也不会被替换。

3.2.2、限定区间行数 字符串内容替换

sed –n '3,5s/word/china/' message

命令说明:将第3-5行中word字符串替换为china,其它行如果有word也不会被替换。

3.2.3、指定区间行 字符串内容替换

sed –n ‘1,+4s/word/china/’ message
命令说明:从第1行开始,再接着往下数4行,也就是1-5行,这些行会把word字符串替换为china。

3.2.4、指定起始行及倍数行 字符串内容替换

sed –n '4,~3s/word/china/' message

命令说明:第4行开始,到第6行。解释6的由来,"4,~3"表示从4行开始到下一个3的倍数,这里从4开始算,那就是6了,当然9就不是了,因为是要求3的第一个超过前边数字4的倍数,这种适用场景不会太多。

3.2.5、指定起始行及跨行规则 字符串内容替换

sed –n '4~3s/word/china/' message

命令说明:从第4行开始,每隔3行就把hello替换为A。比如从4行开始,7行,10行等依次+3行。这个比较常用,比如3替换为2的时候,也就是每隔2行的步调,可以实现奇数和偶数行的操作。

3.2.6、指定起始行及跨行规则 字符串内容替换

sed –n '$s/word/china/' message

命令说明: 符号表示最后一行,和正则中的 符号表示最后一行,和正则中的 符号表示最后一行,和正则中的符号类似,但是第1行不用^表示,直接1就行了。

3.2.7、指定起始行及跨行规则 字符串内容替换

sed -n '1!s/word/china/' message

命令说明:!符号表示取反,该命令是将除了第1行,其它行word替换为china,上述定址方式也可以使用!符号。

3.3、正则表达式

3.3.1、解释

正则表达式必须放在/ / 之间

数字加数字
数字加正则
正则加数字
正则加正则

\c与c分隔符
\c与c只是一个代表,其中c可以换成任意一个字符

说明:正则匹配是非贪婪性的匹配

  • 贪婪性:是匹配到了之后,不停继续匹配,直至文件所有的内容全部匹配完毕。
  • 非贪婪性:是匹配,一旦匹配到了就停止匹配。

3.3.2、操作实例

正则定址使用目的和数字定址一样,只是它们在使用方式上有所不同,是通过正则表达式的匹配来确定需要处理编辑哪些行,其它行就不需要额外处理。

1、匹配到删除

sed -n '/word/d' message

说明:将匹配到word的行执行删除操作。
例子2:
2、删除空行

sed -n '/^$/d' message

3、匹配区间行进行删除

sed -n '/^THE/,/^COME/d' message

说明:匹配以THE开头的行到COME开头的行之间的行,把匹配到的这些行删除。
4、数字定址和正则定址混用

在实际使用过程中我们经常将数字定址和正则定址可以配合使用,参考下边的例子。

sed -n '1,/^THE/d' message

说明:匹配从第1行到THE开头的行,把匹配的行删除。

4、sed使用技巧

4.1 、$= 统计文本有多少行

  1. 统计fyydlz.txt有多少行;
  2. 打印fyydlz.txt 文本内容时加上行号;
sed -n '$=' fyydlz.txt
sed  '=' fyydlz.txt

在这里插入图片描述

4.2 、行内容迁移

将1-5行迁移到10行后

 sed '1,5{H;d};10G' fyydlz.txt

4.3、 将匹配的内容另存为新文件

sed '/the/w fyydlz.txt' fyydlz2.txt

5、练习实操

5.1、实操题目

本次实操题目内容:
假设文件fyydlz.txt的文本如下(可以利用touch命令和vi命令组合创建):

1. hello fyydlz world
2. wold hello hello
3. nothing is important fyydlz 
4. i like movie movie fyydlz 

sed 命令可以用来替换文本行、删除文本行,例子如下:

5.2、 基于题目练习例子

1、查找并替换每行第一个"hello"为"你好":

 sed 's/hello/你好/' fyydlz.txt

在这里插入图片描述

2、查找替换每行中所有的"hello"为"你好":

sed 's/hello/你好/g' fyydlz.txt

在这里插入图片描述

3、删除含有"hello"的行:

sed '/hello/d' fyydlz.txt

在这里插入图片描述

4、删除第2行:

sed '2d' fyydlz.txt

在这里插入图片描述

5、删除第最后一行:

sed 'd' fyydlz.txt

在这里插入图片描述
6、删除第2行到最后一行:

sed '2,d' fyydlz.txt

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

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

相关文章

管理机密(RH294)

在ansible中有一个命令行工具ansible-vault可用于创建 编辑 加密 解密 查看文件举个栗子ansible-vaultcreate filenameNew Vault password: #输入密码Confirm New Vault password: #确认密码也可以使用别的方法 比如创建一个密码文件ansible-vaultcreate…

互联网开发必读Git工具利器-《30天精通Git版本控管》中文版免费分享

本书介绍在软体开发领域,对原始码进行版本控管是非常重要的一件事,有别于Subversion或TFS这类集中式版本控管系统,Git是一套分散式版本控管系统,并带来许多版本控管上的各种优势与解决传统集中式版本控管的缺失,例如支…

Spring Cloud_Hystrix断路器

目录一、概述1.分布式系统面临的问题2.是什么3.能干嘛4.官网资料5.Hystrix官宣,停更进维二、Hystrix重要概念1.服务降级Fallback2.服务熔断Breaker3.服务限流Flowlimit三、hystrix案例1.构建2.高并发测试3.故障现象和导致原因4.上诉结论5.如何解决?解决的…

面试_Selenium常见问题

1.selenium 工作原理 1.对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动 2.浏览器驱动中包含了一个HTTP Server,用来接收这些http请求 3.HTTP Server接收到请求后根据请求来具体操控对应的浏览器 4.浏览器执行具体的测试步骤 5.浏览…

Smali语法小记

Smali语法小记 介绍 在执行 Android Java 层的代码时,其实就是 Dalvik(ART) 虚拟机(使用 C 或 C 代码实现)在解析 Dalvik 字节码,从而模拟程序的执行过程。 自然,Dalvik 字节码晦涩难懂,研究人员们给出了…

通过 eShopOnContainers 项目学习一下微服务

这里是项目地址 https://github.com/dotnet-architecture/eShopOnContainers, 这是微软创建的一个基于 .NET 平台的微服务架构的示例应用程序,里面基本上市面上主流的时髦的技术都用上了。 因为涉及的内容比较多,所以我们只简单查看一下微服务的代码实现…

信息抽取命名实体识别和关系抽取)

信息抽取的定义为:从自然语言文本中抽取指定类型的实体,关系、事件等事实信息。并形成结构化数据输出的文本处理技术。 信息抽取是从文本数据中抽取特定信息的一种技术,文本数据由医学具体的单位构成,例如,句子、段落、…

JavaWeb—Vue的简单介绍

1 Vue介绍 概述 Vue是一套构建用户界面的渐进式前端框架。只关注视图层,并且非常容易学习,还可以很方便的与其它库或已有项目整合。通过尽可能简单的API来实现响应数据的绑定和组合的视图组件。 数据渲染 数据库 --JDBC–> java程序 --http协议–>…

《MySQL实战45讲》——学习笔记23 “binlogredolog 的写入机制/组提交机制“

本篇主要介绍数据的可靠性有关的知识,包括binlog的写入机制和redolog的写入机制,通过了解这些机制从而可以在MySQL的IO性能瓶颈上做些优化;前文介绍了MySQL在可靠性、性能相关的概念,包括WAL技术、redolog与binlog、2阶段提交、ch…

阿里云图标使用 (symbol 引用方式)

阿里云图标网址: https://www.iconfont.cn/ 一、登录注册 这个简单,就不说了 二、给当前项目找图库 2.1、添加项目 2.2、寻找图标添加入库 添加入库 2.3、打开入库 的图标添加到指定项目 添加到当前项目 1 2 三、项目使用图标 ( symbol 引用方式) 3.1、下…

《HelloGitHub》第 82 期

兴趣是最好的老师,HelloGitHub 让你对编程感兴趣!简介HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。https://github.com/521xueweihan/HelloGitHub这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Pyth…

Studio One6有哪些新功能及系统配置要求介绍

Studio One6全新版本上线记录、生产、混合、掌握和执行所有操作。从工作室到舞台,Studio One6以易用为核心,是您的创意合作伙伴。当你准备好登上舞台时,Studio One就在那里。只有Studio One从最初的灵感到完整的制作,最终混音到精…

一个数码管显示0-F

数码管的一种是半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP(decimal point),其基本单元是发光二极管。七段数码管是一类价格便宜使用简…

VuePress 搭建结合GitHub Pages CI

简介 VuePress 是尤雨溪(vue.js 框架作者)4月12日发布的一个全新的基于 vue 的静态网站生成器,实际上就是一个 vue 的 spa 应用,内置 webpack,可以用来写文档。详见 VuePress中文网 其实类似的建站工具有很多&#x…

Java多线程 - 创建线程池的方法 - ThreadPoolExecutor和Executors

文章目录线程池(重点)线程池介绍实现线程池的方式方式一: 实现类ThreadPoolExecutorThreadPoolExecutor构造器的参数线程池处理Runnable任务线程池处理Callable任务方式二: Executors工具类创建线程池线程池(重点) 线程池介绍 什么是线程池? 线程池就是一个可以复用线程的技…

以太网报文详解

以太网数据帧格式 以太网链路传输的数据包称做以太帧,或者以太网数据帧。在以太网中,网络访问层的软件必须把数据转换成能够通过网络适配器硬件进行传输的格式。 以太帧的工作机制 当以太网软件从网络层接收到数据报之后,需要完成如下操作&am…

模拟实现stack queue/dequeue/适配器/优先级队列/仿函数

⭐前言:学习C的STL,我们不仅仅要要求自己能够熟练地使用上层语法,我们还必须要求自己了解其底层原理,不需要了解得太深入,但一定得知道我们写出的各种代码后面,究竟采用了哪种设计思想,为什么要…

口碑巨制《流浪地球2》,再燃中国科幻电影新高度!

2019年,中国本土科幻电影《流浪地球》以炸裂之势吸引一众目光。上映26天,票房突破45亿,强势开启中国科幻电影的元年。如今时隔4年,《流浪地球2》再度登陆春节档,票房口碑双丰收,上映四天票房破13亿、淘票票…

Android渗透测试12:IDA动态调试so

0x00 前言 上一篇分享了使用 Android studio 和 Jeb 对 Apk 文件直接进行动态调试,本文将分享使用 IDA pro 调试 so 。 调试的 apk 文件还是使用 CTF案例4 的文件,已经上传到知识星球,可自行下载 本文涉及技术: IDA pro 工具使…

论文解读 - 城市自动驾驶车辆运动规划与控制技术综述 (第4部分)

文章目录🚗 IV. Mothon Planning(运动规划)🟢 D. Graph Search Methods(图搜索算法)🟥 1) Lane Graph(车道图)🟧 2) Geometric Methods(几何方法&…