当前位置: 首页 > news >正文

Linux文本编辑三剑客之sed

Linux 文本编辑三剑客之 sed

Linux 文本处理三剑客是面试和后端工作中较为常见的。需要掌握:

  • grep:文本过滤、筛选
  • sed:文本编辑加工
  • awk:文本格式化输出

画板

本节内容基于正则表达式:

正则表达式

借助正则表达式可以快速匹配、过滤需要的字符串,在 Linux 上处理大量文本比较高效。

  • 一次处理一行
  • Linux 上只有文本处理工具三剑客(grep、sed、awk)常用,编程语言都有对应支持
  • 扩展正则是基本正则的补充,一般结合三剑客使用建议直接使用扩展正则的写法,简洁

基本正则

符号 作用
^ 模式匹配最左侧,^abc就是以abc开头
$ 模式匹配最右侧,abc$就是以abc结尾
^$ 组合符。空行
. 任意一个且只有一个字符,不匹配空行
* 匹配前一个字符0或多次,不单独使用
.* 组合符。匹配任意多个字符
^.* 组合符。匹配任意多个字符开头
.*$ 组合符。匹配任意多个字符结尾
\ 特殊字符还原本意,\.是小数点
[abc] 匹配集合内任意字符
[^abc] 匹配集合之外的字符
<> 定位单词的左侧和右侧。<deltaqin> 可以找出 deltaqin nb找不出deltaqinnb

扩展正则

符号 作用
+ 匹配前面字符一次或多次
[:@]+ 组合符。匹配[]内的字符一次或多次
? 匹配前面字符0次或1次
` `
() 分组过滤,括号内是一个整体
a{m,n} 前面的字符最少m最多n次
a{m,} 前面的字符最少m次
a{m} 前面的字符m次
a{,m} 前面的字符最多m次

具体使用还是要结合三剑客一起

Why sed

逐行文本过滤、编辑工具。利用正则表达式快速实现增删改查。

What sed

sed [选项]  [模式匹配][sed内置命令字符]  [输入文件]

画板

  • option:选项
    • -i 将结果写到文件,否则是内存数据
    • -n只输出匹配模式的内容
    • -e 一个命令多次编辑,替代管道符
    • -r 正则扩展表达式
  • pattern:模式匹配
    • 不写:全文
    • n:第n行
    • /pattern/:匹配模式的每一行
    • n,m或者/pattern/,/pattern/或者n,+5:范围区间,n到m行,或者pattern之间的行,以及第n行向下5行
    • n~m 第n行开始,步长为m的行
  • 内置命令字符
    • a:指定行的下一行,追加一行或者多行文本
    • d:删除匹配行
    • i:指定行的上一行,插入一行或者多行文本
    • p:打印匹配行内容,和-n选项一起用
    • s/正则/替换后内容/g或者 s#正则#替换后内容#g:匹配正则内容之后替换

How sed--基本正则

按照行号输出行内容

1653212152770-7082ed50-2a8b-45ad-b437-e8f958a38e22.png

-n 只显示匹配模式的行:

1653212137320-6643c296-edc9-4c1f-8ab2-d65ea57cfa73.png

显示2,2+1,2+2,2+3行:

1653212221274-2be8aab6-e6c7-463a-a3f2-d897af9acb1d.png

显示 2 行到结尾

1653212572821-5c1e30f5-75a5-4fd4-b237-cea984d347ab.png

按照正则匹配输出行内容

1653212282620-efc25253-b49d-4402-8304-528b5638965a.png

删除正则匹配输出行内容

1653212408892-8600c82c-34ee-4fee-a2c6-41b151074f39.png

上面只在内存生效,要在文件生效使用-i

1653212472815-1d884eb3-b1b2-4837-bdb1-5158608392e0.png

替换文件内容

所有的 java 替换为 go

1653212744166-8a3b901d-ad77-4867-831b-f1e2ae932439.png

多次编辑

1653212844558-9765cc3b-c0a1-4ef4-baa3-176ac0ec0409.png

1653212881918-ffe95f5c-3b7a-4b96-aabf-45036ab3a4f0.png

匹配行下方追加内容

在指定行追加一行

1653213040191-a3a5b9bb-f07b-4e81-8cec-af4cf2d5af6c.png

在指定行追加多行,使用换行符 \n

1653213030143-839858ca-3cbd-40f4-94ff-86421ecf7887.png

在每一行插入新内容

1653213119308-dc04ff9e-dd88-4f8b-a1da-f3d0d13eb5f2.png

匹配行上方插入内容

1653213166409-c4d99f19-0ba9-4050-9d4a-ed290e6089dc.png

常见使用案例

取出 Linux IP

1653213792992-f6bf5880-4a14-4625-98e4-ae5d8da6ac7c.png

注意模式匹配中都要指定 2

1653213735758-6a4310c6-9ba2-45f3-b26e-378cadd9028d.png

替换前3行java为go,只替换一次与替换所有,打印到控制台

1653222713784-ca83416c-40c1-4390-afc0-1d594f680a40.png

1653222728782-462ea315-4545-4bf9-91bc-1cf3f6093b7c.png

替换前3行java为go,替换所有,应用到文件

1653223036407-a08436a1-26bb-47c2-bb7b-2cef12449671.png

1653223051471-d1b79c21-3b67-4273-8896-42d189bc14f8.png

删除第三行

1653223114994-2a619537-786d-41db-a551-b0f83b7889f7.png

空格、空行开头的添加注释

1653223313079-0a3e26b9-1a09-4b3b-a7fa-246a5968cb4d.png

文件前三行添加

-r 是正则扩展

1653223414360-b8d44f61-0d06-408d-84fc-d1009813f51d.png

1653223454829-21e698e4-4683-441e-8c81-26a724d43718.png

找出系统版本

1653223645904-8927d110-2dda-42f9-a42f-8cf21ff9007b.png

1653223695150-4f66b752-4441-40ab-a443-43e043d9d48e.png

http://www.hskmm.com/?act=detail&tid=29536

相关文章:

  • 做了项目经理才发现:上台发言,其实都有套路
  • 占位符
  • 什么是IO多路复用?
  • 进程、线程和协程之间的区别和联系
  • 挣点小钱的副业(附带新手教程)0元的快乐
  • Linux文本编辑三剑客之awk
  • 软考~高效的系统规划与管理师考试—知识篇—V2.0—第四章 IT 服务规划设计 — 2017 年 2018 年 2020 年 2022 年 2023 年
  • 10.12
  • 从“优化工具”到“价值生态”:多价值主体系统如何重塑AI价值对齐范式
  • 2.2 深度学习(Deep Learning)
  • 结对项目
  • 第十二篇
  • 2.1 函数逼近(Function Approximation)
  • Elasticsearch 备份:snapshot 镜像使用篇
  • 本次科研收获
  • 2025.10.12 - 20243867孙堃2405
  • git clone 克隆下载深度层级仓库最新源码而不是整个仓库
  • 九、可供选择的体系结构
  • Linux查看一个文件的时候发生了什么?
  • 内存管理
  • 2025 年 10 月金属门窗厂家加盟代理品牌推荐排行榜,行业权威盘点与品质红榜发布
  • 五、指令集架构深入分析
  • ARC 208 Div.2
  • 八、系统软件
  • 七、输入输出和存储系统
  • 那快把题端上来吧(五)
  • 机器学习学术研讨会柏林举办
  • 构建易受攻击的AWS DevOps环境:CloudGoat攻防实战
  • 虚拟机和windows
  • MySQL 5.7版本,搭建一个两主一从的多源主从复制环境