8. 文本三剑客之sed

news2024/11/24 2:41:29

文章目录

    • 8.1 介绍
      • 8.1.1 工作流程
      • 8.1.2 命令格式
    • 8.2 sed 使用
      • 8.2.1 查找/打印
      • 8.2.2 添加
      • 8.2.3 修改
      • 8.2.4 删除
    • 8.3 保存操作后的内容

8.1 介绍

sed编辑器被称作流编辑器( stream editor),和普通的交互式文本编辑器恰好相反。在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入、删除或替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变。

8.1.1 工作流程

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。 sed编辑器会执行下列操作。
(1) 一次从输入中读取一行数据。
(2) 根据所提供的编辑器命令匹配数据。
(3) 按照命令修改流中的数据。
(4) 将新的数据输出到STDOUT。

在这里插入图片描述

8.1.2 命令格式

sed [选项] [sed内置命令字符] [输入文件]

选项;
  -n   取消默认sed的输出,常与sed内置命令p一起用
  -i   直接将修改结果写入文件,不用-i,sed修改的是内存数据
  -e   多次编辑,不需要管道符
  -r   支持正则扩展
  
sed的内置命令用于对文件进行不同的操作功能,如对文件增删改查。

sed常用内置命令字符:
  a  append,对文本追加,在指定行后面添加一行/多行文本
  d  Delete,删除匹配行
  i  insert,表示插入文本,在指定行前添加一行/多行文本
  p  print,打印匹配行的内容,通常与-n一起用
  s/正则/替换内容/g    匹配正则内容,然后替换内容(支持正则),结尾g表示全局匹配

sed匹配范围:

范围解释
空地址全文处理,即每行都处理
单地址指定文件某一行
/pattern/被模式匹配到的每一行
范围区间10,20 十到二十行 ,10,+5 第10行向下5行 ,/parttern1/,/pattern2/
步长1~2 表示1、3、5、7、9奇数行,2~2表示2、4、6、8、10偶数行

使用示例:替换字符串

# 输出指定字符串到屏幕上
[root@openEuler ~]# echo "This is a test"
This is a test
# 将字符串中的 is 替换为 IS 后再输出到屏幕上
[root@openEuler ~]# echo "This is a test" | sed "s/is/IS/"
ThIS is a test
# 将字符串中所有的 is 替换为 IS 后再输出到屏幕上
[root@openEuler ~]# echo "This is a test" | sed "s/is/IS/g"
ThIS IS a test

下面我们编写一个文件,然后来演示 sed 命令的各种用法:

[root@openEuler ~]# vim test.txt
[root@openEuler ~]# cat test.txt 
I have a pen
I have an apple
I have a book
I love you

8.2 sed 使用

8.2.1 查找/打印

查找格式,p 表示显示,一般和 -n 一起使用

格式说明
‘1p’指定行号进行查找
‘1,5p’指定行号范围进行查找
‘//p’类似于grep的过滤,//里面可以写正则
‘/10:00/,/11:00/p’表示范围的过滤
‘1,/haha/p’混合,从1到包含有haha行结束,了解

例1:接合 -n 选项来输出第三行内容

[root@openEuler ~]# sed '1p' test.txt 
I have a pen
I have a pen
I have an apple
I have a book
I love you
[root@openEuler ~]# sed '3p' test.txt 
I have a pen
I have an apple
I have a book
I have a book
I love you
[root@openEuler ~]# sed -n '3p' test.txt 
I have a book

例2:输出 test.txt 文件中1到3行内容

[root@openEuler ~]# sed -n '1,3p' test.txt
I have a pen
I have an apple
I have a book

例3:在 test.txt 文件中查找 hive

# 查找内容中包含有 hive 的行
[root@openEuler ~]# sed -n '/hive/p' test.txt
I have a pen
I have an apple
I have a book
# 查找内容中包含有 love 的行
[root@openEuler ~]# sed -n '/love/p' test.txt
I love you

例4:在 test.txt 文件中查找 pen 到 book 的行

[root@openEuler ~]# sed -n '/pen/,/boo/p' test.txt
I have a pen
I have an apple
I have a book

例5,在 test.txt 文件中从第一行开始查找,直到包含 apple 字符串为止

[root@openEuler ~]# sed -n '1,/apple/p' test.txt
I have a pen
I have an apple

8.2.2 添加

在 sed 中增加数据的格式如下:

命令说明
creplace,表示替换
aappend 表示追加
iinsert 表示插入

示例:

[root@openEuler ~]# vim test.txt
[root@openEuler ~]# cat test.txt 
I have a pen
I have an apple
I have a book
I love you



# 打印,第3行
[root@openEuler ~]# sed -n '3p' test.txt
I have a book

# 在每一行后添加新的内容
[root@openEuler ~]# sed 'ahallo world' test.txt
I have a pen
hallo world
I have an apple
hallo world
I have a book
hallo world
I love you
hallo world

# 在test.txt文件的第2行之后添加 hello
[root@openEuler ~]# sed '2ahello' test.txt
I have a pen
I have an apple
hello
I have a book
I love you

# 在第一行之前加hello
[root@openEuler ~]# sed 'ihello' test.txt
hello
I have a pen
hello
I have an apple
hello
I have a book
hello
I love you
[root@openEuler ~]# sed 'i\hello' test.txt
hello
I have a pen
hello
I have an apple
hello
I have a book
hello
I love you

# 在test.txt文件中第4行前面加上内容
[root@openEuler ~]# sed '4i\shell sed' test.txt
I have a pen
I have an apple
I have a book
shell sed
I love you

8.2.3 修改

在修改文件内容时,我们可以使用以下的替换格式:

1. s#被替换的内容#替换后的内容#g
2. s/被替换的内容/替换后的内容/g
3. s@被替换的内容@替换后的内容@g

在上面的格式中,g 表示全局替换。

s 表示 substriute

使用示例:

# 1. 将test.txt文件中的 have 替换为 Have
[root@openEuler ~]# sed 's#have#Have#g' test.txt
I Have a pen
I Have an apple
I Have a book
I love you

[root@openEuler ~]# sed 's/have/Have/g' test.txt
I Have a pen
I Have an apple
I Have a book
I love you

[root@openEuler ~]# sed 's%have%Have%' test.txt
I Have a pen
I Have an apple
I Have a book
I love you

# 2. 将输入的 123456 变为 <123456> 输出
[root@openEuler ~]# echo 123456
123456
[root@openEuler ~]# echo 123456 | sed 's/(.*)/<1>/g'
123456
[root@openEuler ~]# echo 123456 | sed -r 's/(.*)/<1>/g'
<1>
[root@openEuler ~]# echo 123456 | sed -r 's/(.*)/<\1>/g'
<123456>

# 3. ip a 通过反向引用取出 ens160 网卡的ip
# 3.1. 查看ens160设备的网卡信息的命令
[root@openEuler ~]# ip a s ens160
[root@openEuler ~]# ip a show ens160
[root@openEuler ~]# ifconfig ens160
例如:
[root@openEuler ~]# ip a show ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:24:80:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.72.131/24 brd 192.168.72.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe24:8097/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

# 3.2 我们可以取出上面结果中第3行的内容
[root@openEuler ~]# ip a show ens160|sed -n '3p'
    inet 192.168.72.131/24 brd 192.168.72.255 scope global noprefixroute ens160
    
[root@openEuler ~]# ip a show ens160|sed -n '3p'|sed -r 's#(^.*t )(.*)(/.*$)#\2#g'
192.168.72.131
#或者
[root@openEuler ~]# ip a show ens160|sed -n '3p'|sed -r 's/(^.*t )(.*)(\/.*$)/\2/g'
192.168.72.131

以上正则表达式说明:

  • (^.*t ):表示获取 " inet " 的内容
  • (.*):表示获取IP地址 192.168.72.131
  • (/.*$):表示获取 /后的所有内容,即 /24 brd 192.168.72.255 scope global noprefixroute ens160
  • \2:表示获取第2组内容

示例4. stat /etc/hosts 取出权限 644

[root@openEuler ~]# stat /etc/hosts|sed -n '4p'|sed -r 's/^.*\(0(.*)(\/-.*$)/\1/g'
644

8.2.4 删除

在 sed 中删除内容是使用 d 命令来实现的,它的格式为:

格式说明
‘1d’指定等号进行删除
‘1,5d’范围删除,删除1到5行
‘//d’使用正则表达式来进行匹配删除
‘/10:00/,/11:00/d’表示范围删除
‘1,/haha/d’混合模式,从1到包含haha的行结束

示例:

1. 删除test.txt文件的第3行
# 1.1 原来的内容
[root@openEuler ~]# cat test.txt
I have a pen
I have an apple
I have a book
I love you
## 1.2 删除后的内容
[root@openEuler ~]# sed '3d' test.txt
I have a pen
I have an apple
I love you

2. 删除test.txt文件中从第2行开到哪第第4行
[root@openEuler ~]# sed '2,4d' test.txt
I have a pen

3. 删除test.txt文件的第1行到包含有book的行
[root@openEuler ~]# sed '1,/book/d' test.txt
I love you
[root@openEuler ~]# sed '1,/apple/d' test.txt
I have a book
I love you

4. 删除/etc/ssh/sshd_config文件的空行和带#号行以外的所有行
# 4.1 获取空行和带#号的行
[root@openEuler ~]# grep -E '^$|#' sshd_config
[root@openEuler ~]# sed -n -r '/^$|#/p' sshd_config
# 4.2 删除空行和带#号的行
[root@openEuler ~]# sed -r '/^$|#/d' sshd_config
# 4.3 删除空行和带#号和行以外的
[root@openEuler ~]# sed -r '/^$|#/!d' sshd_config

8.3 保存操作后的内容

在 10.2 节中使用的 sed 命令所有操作都是在内存中完成了,它并不会影响原来的文件内容。如果希望操作后改变原来文件的内容,我们就需要使用 sed 命令的 -i 选项。

1. 在test.txt文件的第3行位置添加ni hao wo hao da jia hao,并写入到文件中
[root@openEuler ~]# sed -i '3a\ni hao wo hao da jia hao' test.txt
[root@openEuler ~]# cat test.txt 
I have a pen
I have an apple
I have a book
ni hao wo hao da jia hao
I love you

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

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

相关文章

win10打开共享设置

win10打开共享设置

themleaf 页面弹层取值

themleaf 页面弹层取值 创作背景themleaf页面事件onbluronclick 页面参数提交 创作背景 个人在日常开发中&#xff0c;遇到了一个需求页面&#xff0c;页面交互较多&#xff0c;用到的事件也很丰富&#xff0c;特此记录&#xff0c;方便后续查找也方便有需要的开发者采用&…

chrome浏览器设置--disable-web-security解决跨域

在开发人员于后台进行接口测试的时候&#xff0c;老是遇到跨域问题&#xff0c;这时前端总是会让后台添加跨域请求头来允许跨域请求&#xff0c;今天介绍一个简单的方法跨过这一步操作的设置。 –disable-web-security参数&#xff0c;禁用同源策略&#xff0c;利于开发人员本…

Postman 请求参数传递指南:Query、Path和Body

Postman 作为一个功能强大的工具&#xff0c;极大地简化了 API 测试和调试的过程&#xff0c;提供了发送请求和检查响应的直接方法。本文将着重介绍如何在 Postman 中高效地处理请求参数&#xff0c;以提高 API 测试和开发的便利性。 1、解析请求参数 首先&#xff0c;我们需要…

2024最值得入手的骨传导耳机有几款?年度精选五款骨传导耳机分享

作为一个爱好运动的人来说&#xff0c;现在天气越来越暖和了&#xff0c;很多人选择外出徒步、越野或者骑行。在运动过程中都会佩戴一些入耳式耳机&#xff0c;但是运动一段时间发现入耳式耳机带久了耳朵会很不舒服&#xff0c;而且出汗了的话对于一些不防水的入耳式耳机的话&a…

硕思LOGO设计师软件最新版下载及详细安装教程

硕思Logo设计师是一款操作灵活简单&#xff0c;且功能强大的logo制作软件。它可以通过简单的点击就可以为网站、博客、论坛和邮件创建专业的logo、条幅、按钮、标题、图标和签名等。 该软件提供了很多精心设计的模板和丰富的资源&#xff0c;为更好的创建logo艺术作品&#xff…

博物馆藏品管理的重要性

博物馆是人们了解历史文化、传承文明的重要场所。而博物馆的藏品管理是博物馆的核心工作之一&#xff0c;对于展现博物馆的魅力、吸引观众的眼球有着至关重要的影响。并且博物馆藏品管理是一项复杂且专业的工作&#xff0c;它涉及到多个方面&#xff0c;包括但不限于藏品的收集…

DDPM公式推导(一)

去噪扩散概率模型 Title:Denoising Diffusion Probabilistic Models paper是UC Berkeley发表在NIPS 2020的工作 paper地址 Abstract 我们使用扩散概率模型&#xff08;一类受非平衡热力学启发的潜在变量模型&#xff09;展示了高质量的图像合成结果。根据扩散概率模型与采用La…

AI大模型的应用远比你想像的要简单—人人都是程序员

2022年底OpenAI发布了语言大模型chatgpt3.5&#xff0c;它能像人一样跟我们聊天&#xff0c;从此AI市场着了大火&#xff0c;国内外各个顶级科技公司纷纷跟进&#xff0c;出现了一大批的AI大模型&#xff0c;比如文心一言&#xff08;百度&#xff09;、Gemini&#xff08;谷歌…

Python 使用print输出二进制文件时产生的错位

项目实践中&#xff0c; with open(fileName, rb) as f: result f.read()print(result)f.close()打开二进制文件&#xff0c;打印出的结果会出现有些\x后面有好几个字符的情况 但实际这串数字是 这种情况是因为print函数将二进制数据解释为字符串并以其字节值的十六进制表…

中电金信:GienTech动态|中标、入选、参会...近期精彩呈现!

中电金信参编业内首个银行核心系统分级度量标准 2024年6月6日&#xff0c;由中国信息通信研究院云计算与大数据研究所主办的“应用现代化赋能银行核心系统升级”交流会议在京召开。会议发布了业内首个银行核心系统分级度量标准《银行核心系统现代化建设水平度量模型》&#xf…

视频字幕提取工具怎么使用?不妨看看这些教程

在探索学习设备使用的过程中&#xff0c;视频教程扮演着极其重要的角色。 但是&#xff0c;我们可能会遇到一些挑战&#xff0c;比如长视频教程的观看效率不高&#xff0c;信息量大难以快速定位到关键点&#xff0c;或者有些人更喜欢阅读文字而非观看视频来学习。 为解决这一…

前沿重器[49] | 聊聊搜索系统2:常见架构

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

GPT4,你能做什么详细告诉我可以么?

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

三个pdf工具和浏览软件(pdftk,muppdf,epdfview)

安装pdftk pdftk是一款功能强大的PDF处理工具&#xff0c;主要用于对PDF文件进行各种操作。它提供了丰富的功能&#xff0c;包括但不限于合并、拆分、旋转、加密、解密、添加水印、从PDF文档中解出附件等。pdftk分为图形界面版本和命令行版本&#xff0c;适用于不同的用户需求…

HTML入门教程:深度解析HTML,开启你的前端技术之旅

一、引言 HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是前端开发的基础&#xff0c;它负责构建网页的结构和内容。作为前端技术栈的基石&#xff0c;HTML的掌握程度直接影响到网页的开发效率和用户体验。本教程将带你从零开始&#xff…

算法体系-22 第二十二节:暴力递归到动态规划(四)

一 最小距离累加和 1.1 描述 给定一个二维数组matrix&#xff0c;一个人必须从左上角出发&#xff0c;最后到达右下角 沿途只可以向下或者向右走&#xff0c;沿途的数字都累加就是距离累加和 返回最小距离累加和 1.2 分析

【安卓】在安卓中使用HTTP协议的最佳实践

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

OpenCV图像变换

一 图像的缩放 resize(src,dst,dsize,fx,fy,interpolation) fx&#xff1a;x轴的缩放因子 fy&#xff1a;y轴的缩放因子 interpolation 插值算法 INTER_NEAREST,临近插值&#xff0c;速度快&#xff0c;效果差 INTER_LINEAR,双线性插值&#xff0c;原图中的4个点 INTER_CUBIC…

手机在网状态-手机在网状态查询-手机在网站状态接口

查询手机号在网状态&#xff0c;返回正常使用、停机、未启用/在网但不可用、不在网&#xff08;销号/未启用/异常&#xff09;、预销户等多种状态 直连三大运营商&#xff0c;实时更新&#xff0c;可查询实时在网状态 高准确率-实时更新&#xff0c;准确率99.99% 接口地址&…