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

sed相关知识

目录

1、sed是什么

2、sed的原理

3、sed 命令常见用法

3.1 简版理解命令选项

3.2 sed 命令用法示例


1、sed是什么

sed 命令是利用脚本来处理文本文件。它可以依照脚本的指令来处理、编辑文本文件。主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

2、sed的原理

sed 的工作流程主要包括读取、执行和显示三个过程。

读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模 式空间,pattern space)。

执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。

显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。 在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

sed 的工作流程主要包括读取、执行和显示三个过程。

读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模 式空间,pattern space)。

执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。

显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。 在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的 sed 命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除 非是用重定向存储输出。

3、sed 命令常见用法

sed [选项] '操作' 参数 sed [选项] -f scriptfile 参数

3.1 简版理解命令选项

选项 含义

-e 进行多次编辑

-n 取消默认输出

-f 指定sed文件名

-i 直接在源文件中修改

-r 使用扩展正则表达式

sed常用命令动作

命令动作 含义

p  打印输出

d  删除指定行

i  在指定行之前插入内容

a  在指定行后面插入内容

c  替换指定行所有内容

s  搜索替换

3.2 sed 命令用法示例

以 demo 文件为例进行演示。

3.3.1 输出符合条件的文本(p 表示正常输出)

sed -n 'p' demo      #输出所有行跟cat demo输出效果一样

sed -n '3p' 

sed -n '/the/p' demo      #输出包含the的行

sed -n '4,/the/p' demo      #输出从第四行到出现the的行

sed -n '/^PI/p' demo      #输出以PI开头的行

sed -n '/[0-9]$/p' demo      #输出以数字结尾的行

sed -n '/\<wood\>/p' demo      #输出包含单词wood的行

3.3.2 删除符合条件的文本(d)

因为后面的示例还需要使用测试文件 demo,所以在执行删除操作之前需要先将测试文件备份。以下示 例分别演示了 sed 命令的几种常用删除用法。

下面命令中 nl 命令用于计算文件的行数,结合该命令可以更加直观地查看到命令执行的结果

nl demo|sed '3d'      #删除第三行

nl demo|sed '3,5d'      #删除第三到五行

nl demo|sed '/cross/d'      #删除包含cross的行

sed '/^[a-z]/d' demo      #删除以小写字母开头的行

sed '/\.$/d' demo      #删除所有以.结尾的行

去除行尾的空格?

3.3.3 替换符合条件的文本 在使用 sed 命令进行替换操作时需要用到 s(字符串替换)、c(整行/整块替换)、y(字符转换) 命令选项,常见的用法如下所示。

sed 's/the/THE/' demo      #将所有行第一个the用THE替代

sed 's/l/L/2' demo      #将所有行中第二个l替换成L

sed 's/the/THE/g' demo      #将所有行中的所有the替换为THE

sed 's/o//g' demo      #将所有行的所有o替换为空字符串,即删除所有o

sed 's/^/#/' demo      #在所有行的行首插入#

sed 's/$/EOF' demo      #在所有行的行尾添加EOF

sed '3,5s/the/THE/g' demo      #将第三到五行的所有the替换为THE

sed '/the/s/o/O/g' demo      #将所有含the的行中的所有o替换为O

3.3.4 迁移符合条件的文本 在使用 sed 命令迁移符合条件的文本时,常用到以下参数

H:复制到剪贴板

d:删除模式空间内容,开始下一个循环(不输出当前行)

g、G:将剪贴板中的数据覆盖/追加至指定行

w:保存为文件

r:读取指定文件

a:追加指定内容。具体操作方法如下所示

I,i 忽略大小写

sed 'the/{H;d};$G/' demo      #将所有行中含the的行复制并且删除,然后粘贴到末行

sed '/the/{H;d};17G' demo      #将所有行中含the的行复制并且删除,粘贴到第17行后,因为实例文本并没有17行,所以没有显示

sed '/the/w out.file' demo      #将所有行中含the的行保存在out.file文件中

sed '/the/r /etc/hostname' demo      #在含the的行后插入主机名

sed '3a黄焖鸡' demo      #在第三行后插入黄焖鸡

sed '/the/a黄焖鸡' demo      #在所有含the的行后插入黄焖鸡

sed '3a黄焖鸡\n兰州拉面' demo      #在第三行后插入黄焖鸡和兰州拉面

3.3.5 使用脚本编辑文件

使用 sed 脚本将多个编辑指令存放到文件中(每行一条编辑指令),通过“-f”选项来调用。

例如执行以下命令即可将第 1~5 行内容转移至第 16 行后。

vim opt.list 

sed -f opt.list demo

http://www.dtcms.com/a/363705.html

相关文章:

  • C++基础组件
  • 【值得收藏】手把手教你用PyTorch构建Transformer英汉翻译系统,从训练到推理
  • 小程序蓝牙低功耗(BLE)外围设备开发指南
  • C++革命性新特性:默认实例导出(exportDefault)让单例模式变得无比简单!
  • Vue2 入门(一)介绍及Demo项目创建
  • GISBox内置免费GIS服务器:地形服务发布与应用全指南
  • ChartView的基本使用
  • Redis 的压缩列表:像快递驿站 “紧凑货架“ 一样的内存优化结构
  • Redis-底层数据结构篇
  • 8.30美团技术岗算法第二题
  • 【C++】15. ⼆叉搜索树
  • WordPress.com 和 WordPress.org 之间的区别说明
  • 系统架构——过度设计
  • IO_HW_9_2
  • 教你 Centos 如何离线安装 rlwrap 插件(内网环境)
  • MATLAB矩阵及其运算(三)矩阵的创建
  • 一文搞懂:0-1整数规划与蒙特卡罗模拟(附MATLAB代码详解)
  • 命令行文本处理小工具:cut、sort、uniq、tr 详解与应用
  • 从零开始的python学习——函数(2)
  • shell复习(2)
  • Flutter环境搭建全攻略之-windows环境搭建
  • 毫米波雷达信号处理步骤顺序
  • 树莓派网页监控
  • [嵌入式embed][Qt]Qt5.12+Opencv4.x+Cmake4.x_用Qt编译Windows-Opencv库
  • LangGraph 重要注意事项和常见问题
  • MTK Linux DRM分析(二十六)- MTK mtk_drm_ddp_xxx.c
  • 如何创建逻辑卷
  • Shell脚本入门:从零到精通
  • 容器设备映射配置在海外云服务器GPU加速环境的实施规范
  • QML的focus与activeFocus