文本三剑客之sed

sed介绍

sed 简介

sed 流编辑器。sed的全称:Stream EDitor 简称sed 是个流编辑器,sed是一个行编辑器、首先它是个流编辑器是实现文本流编辑的,所谓行编辑器主要指的是它在实现文本编辑时是逐行进行处理的所以称为sed。对于sed命令而言,这是著名的,在linux中称为文本处理三剑客之一的sed,grep 是实现文本过滤的、而sed是实现文本编辑的,awk是文本报告生成器。

sed 工作模式

例如说有个文件,里面有n多行 对sed的而言它是每一次从这文件中按条件按范围读取一行,它里头是有地址定界,不管怎么讲它要么有地址定界,要么没有地址定界,如果没给出地址定界方式,表示读取全文中的每一行,那就从每一行开始说明,比较容易理解,所以对sed来讲,它是一次从文件中读取出来一行,不会编辑源文件、而是读取出来之后放在sed自己所用到的内存缓冲区当中,它默认不做就地编辑,不做原地编辑,也就是说它不去编辑源文件,而是一次从源文件中读一行出来放到sed自己内部的编辑内存缓冲空间当中,这个内部的缓冲空间称作为sed的模式空间 叫作pattem space ,依次从模式空间读一行到这个空间里来,在这个空间中完成编辑,编辑完以后该如何呢,它会将模式空间中的内容干什么,问你编辑不编辑,如果说它读到一行,刚才说过我们这里的脚本可以基于正则表达式来做查找替换等操作,如果我们这一行没有查找到、没有匹配到内容显然是不会替换的,如果没有被编辑或者被编辑了这个结果,模式空间中应该还有内容,如果不走删除的话、那模式空间中的内容无论是否被编辑了,最终的处理结果还要显示到屏幕上来要给一个输出流,这大体是它的默认工作方式

sed用法

对sed而言,它主要是一个文本编辑器,因此sed的使用格式可以是用man sed 查看它的格式和用法

[root@jenkins-server ~]# man sedSED(1)                                                                                          User Commands                               SED(1)NAME       sed - stream editor for filtering and transforming textSYNOPSIS       sed [OPTION]... {script-only-if-no-other-script} [input-file]...       ......

常用选项

-n:不输出模式中的内容至屏幕

-e: 多点编辑功能

-f: 从指定文件中读取编辑脚本

-r:支持使用扩展正则表达式

-i:原处编辑,修改源文件

地址定界

1、对sed而言可以不给地址:      这种表示对每一行都做处理,也就是对全文进行处理。而且每一行都符合条件、这叫零地址或者叫zero or address2、单地址:     不是使用逗号隔开的一个范围的这种叫作单地址   例如      #:精确第几行,也就是指定的行      /pattern/:表示被此模式所能够匹配到的每一行3、地址范围      #,#   从第几行开始到第几行结束      #,+#  从第几行开始往下走几行      /pat1/,/pat2/   从哪一行开始甚至到哪一行结束      同时/pat1/2和地址定界表示法当中的精确第几行也可以联合起来使用       #,/pat1/4、~:步进       1~2  奇数行       2~2  偶数行步进示例:[root@jenkins-server ~]# sed -n '1~2p' a.txt 135[root@jenkins-server ~]# sed -n '2~2p' a.txt 246

常用的编辑命令

d:  删除p:  显示模式空间中的内容  a \\text  在行后面追加文本,支持使用\n实现多行追加i  \\text   在行前面插入文本,支持使用\n实现多行插入c \\text   替换行为单行或多行文本w /path/to/somefile:保存模式空间匹配到的行至指定文件中r /path/to/somefile:读取指定文件的文本流至模式空间匹配到的行的行后= :为模式空间中的行打印行号!:取反条件s///:支持使用其它分隔符, s@@@, s###,同时这里在实现所谓的查找替换时也一样支持sed修饰符我们称为替换标记:    g:行内全局替换    p:显示替换成功的行    w:/path/to/somefile:将替换成功的结果保存至指定文件中

常用的编辑命令示例

d选项命令例子[root@jenkins-server ~]# sed '1,8d' /etc/fstab UUID=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 0UUID=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 0UUID=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0[root@jenkins-server ~]# sed '/^UUID/d' /etc/fstab ## /etc/fstab# Created by anaconda on Tue Apr 21 11:11:45 2020## Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#p选项命令例子[root@jenkins-server ~]# sed '/^UUID/p' /etc/fstab # /etc/fstab# Created by anaconda on Tue Apr 21 11:11:45 2020## Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info## 由于默认就会显示模式空间的内容,然后又加了p选项把符合的内容再次打印一遍,所以看到的结果每行有两行UUID=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 0UUID=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 0UUID=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 0UUID=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 0UUID=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0UUID=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0#如果不想打印其他内容的话 需要加上-n不打印模式空间中的内容,只打印匹配到的内容[root@jenkins-server ~]# sed -n '/^UUID/p' /etc/fstab UUID=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 0UUID=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 0UUID=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0[root@jenkins-server ~]# sed '/^UUID/d' /etc/fstab ## /etc/fstab# Created by anaconda on Tue Apr 21 11:11:45 2020## Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#a选项命令例子[root@jenkins-server ~]# sed '/^UUID/a \# hello sed.' /etc/fstab UUID=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 0# hello sed.UUID=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 0# hello sed.UUID=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0# hello sed.[root@jenkins-server ~]# sed  '/^UUID/a \# hello sed.\nwww.dklwj.com' /etc/fstab UUID=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 0# hello sed.www.dklwj.comUUID=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 0# hello sed.www.dklwj.comUUID=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0# hello sed.www.dklwj.comi选项命令例子[root@jenkins-server ~]# sed '/^UUID/i \# hello sed.\nwww.dklwj.com' /etc/fstab # hello sed.www.dklwj.comUUID=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 0# hello sed.www.dklwj.comUUID=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 0# hello sed.www.dklwj.comUUID=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0c选项命令例子[root@jenkins-server ~]# sed  '/^UUID/c \# hello sed.\nwww.dklwj.com' /etc/fstab# /etc/fstab# Created by anaconda on Tue Apr 21 11:11:45 2020# Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info# hello sed.www.dklwj.com# hello sed.www.dklwj.com# hello sed.www.dklwj.com w选项命令例子[root@jenkins-server ~]# sed -n '/^UUID/w /tmp/fstab.txt' /etc/fstab [root@jenkins-server ~]# cat /tmp/fstab.txt UUID=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 0UUID=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 0UUID=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0r选项命令例子[root@jenkins-server ~]# sed '6r /etc/issue' /etc/fstab # 在第6行后面读取/etc/issue中的内容并显示## /etc/fstab# Created by anaconda on Tue Apr 21 11:11:45 2020## Accessible filesystems, by reference, are maintained under '/dev/disk'\SKernel \r on an \m# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#UUID=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 0UUID=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 0UUID=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0=选项命令例子[root@jenkins-server ~]# sed '/^UUID/=' /etc/fstab #9UUID=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 010UUID=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 011UUID=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0!选项命令例子这里的意思除了以UUID开头的行以外的行都被删除,它是被地址定界取反的[root@jenkins-server ~]# sed  '/^UUID/!d' /etc/fstab UUID=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 0UUID=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 0UUID=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0s选项命令例子[root@jenkins-server ~]#  sed -n 's/^UUID/uuid/gp' /etc/fstab uuid=6cb4e3c4-11be-449c-928a-12ef089ebe60 /                       xfs     defaults        0 0uuid=5e3a67b5-271a-4ace-9990-6160d74f5496 /boot                   xfs     defaults        0 0uuid=dc602b5d-5dae-4083-b395-d10ab94fa826 swap                    swap    defaults        0 0# 如何引用原来字符串需要加上&符号即可[root@jenkins-server ~]# sed -n 's#r..t#&er#gp' /etc/passwdrooter:x:0:0:rooter:/rooter:/bin/bashoperator:x:11:0:operator:/rooter:/sbin/nologinftp:x:14:50:FTP User:/var/fterp:/sbin/nologin# 替换后的结果保存到/tmp/目录中去[root@jenkins-server ~]# sed -n 's#r..t#&er#pw /tmp/pass.txt' /etc/passwdrooter:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/rooter:/sbin/nologinftp:x:14:50:FTP User:/var/fterp:/sbin/nologin[root@jenkins-server ~]# cat /tmp/pass.txt rooter:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/rooter:/sbin/nologinftp:x:14:50:FTP User:/var/fterp:/sbin/nologin

高级命令

高级命令选项

h:把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g:从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

x:把模式空间中的内容与保持空间中的内容进行互换

n:读取匹配到的行的下一行至模式空间

N:追加匹配到的行的下一行至模式空间

d:删除模式空间中的行

D:删除多行模式空间中的所有行

高级命令选项示例

创建一个测试文件[root@jenkins-server ~]# vim a.txt123456显示偶数行[root@jenkins-server ~]# sed -n 'n;p' a.txt 246逆向显示文件内容[root@jenkins-server ~]# sed '1!G;h;$!d' a.txt 654321取出文件中最后两行[root@jenkins-server ~]# sed '$!N;$!D' a.txt 56取出文件中最后一行[root@jenkins-server ~]# sed '$!d' a.txt 6在每一行后面加一行空白行[root@jenkins-server ~]# sed 'G' a.txt 123456合并多个空白行为一个空白行[root@jenkins-server ~]# sed '/^$/d;G' a.txt 123456显示奇数行[root@jenkins-server ~]# sed 'n;d' a.txt 135逆向显示文件中的每一行[root@jenkins-server ~]# sed -n '1!G;h;$p' a.txt 654321

sed 插入多行_文本三剑客之sed相关推荐

  1. [shell] sed 插入多行文本

    用 sed 命令插入多行文本,感觉这个操作有点费劲,所以在这记录一下.

  2. Linux文本三剑客之sed仗剑走天涯

    一,sed是什么? sed是Strem Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.对文件内容逐行(行编辑器,一行读取一次,对行编辑)进行处理调用操作并显示到STDOUT,常用 ...

  3. 文本三剑客:sed编辑器

    sed编辑器 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流. sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本 ...

  4. 文本三剑客之sed命令--文本替换;grep命令---文本过滤

    目录 1.sed简介 2.sed的p命令--打印匹配行 3.sed的d命令--删除指定行 4.sed的a命令--在匹配行后面追加 5.sed的i命令--在匹配行前面插入 6.sed的c命令--整行替换 ...

  5. 文本三剑客之——sed编辑器

    sed编辑器 sed编辑器 sed基础语法 sed查询 sed删除 sed 替换 sed 插入 sed编辑器 sed是文本处理工具,依赖于正则表达式,可以读取文本内容,工具指定条件对数据进行添加.删除 ...

  6. 【文本三剑客】SED

    SED 一.sed编辑器 1.2sed简介 1.3sed工作流程 1.4sed命令格式 1.5常用选项 1.6常用操作 二.sed实验 2.1打印内容 2.2删除行 2.3替换 2.4插入 一.sed ...

  7. 【文本三剑客之一sed】

    文章目录 一.sed命令会从文件或者标准输入中一次读取一行数据,将其复制到缓冲区,然后读取命令行或者脚本的编辑子命令,对缓冲区中的文本行进行编辑.重复此过程,一直到所有的文本行都处理完毕 1.工作原理 ...

  8. sed 插入多行_Linux三剑客之sed

    sed命令用法小记 版本:CentOS7 ▼  ▼  ▼  ▼  ▼   ▼  ▼  ▼  ▼ 好久没更新文章了,项目的事情太多,总得给自己的懒惰找个借口,哈哈~ 话不多说进入正题 创建测试数据 [a ...

  9. Linux文本三剑客之sed

    sed命令详解 一.简介 二.工作原理 三.用法 1.地址定界 2.编辑命令 四.实例及详解 一.简介 sed是一种新型的,非交互式的流式(从上往下读取一行处理一行)的编辑器 可以执行vi和ex相同的 ...

最新文章

  1. 【codeforces】【比赛题解】#940 CF Round #466 (Div. 2)
  2. Fescar锁和隔离级别的理解
  3. 多维数组的索引与切片_「GCTT 出品」Go 系列教程——11. 数组和切片
  4. sizeof()使用注意
  5. springboot源码分析之环境属性构造过程1
  6. Android加速度传感器实现“摇一摇”,带手机振动
  7. python计算入门_Python入门教程02-01(计算机核心基础)
  8. DSW:面向AI研发的集成开发平台
  9. 吐血推荐 | 那些提升开发人员工作效率的在线工具
  10. 工具的使用——windows操作系统的使用(创建宽带连接)
  11. java推送微信消息换行_5行代码实现微信小程序模版消息推送 (含推送后台和小程序源码)...
  12. C++11 后置返回类型
  13. 开发版速达光耀-无公网IP服务器访问整体解决方案
  14. 通俗易懂——5G调制方式全面解读
  15. C语言开发windows桌面程序,演练:创建传统的 Windows 桌面应用程序 (c + +)
  16. 建筑物后期调色ps动作
  17. 刨根究底字符编码之八——Unicode编码方案概述
  18. 单位脉冲(冲激)响应与频率响应
  19. Pytorch:lr_schedule恢复训练的注意事项
  20. 最全的Android源码目录结构详解

热门文章

  1. spark的三大数据结构
  2. jmeter性能测试用户参数参数化
  3. ZT: Delphi编程规范1.0.0.0 (yckxzjj )
  4. 07.计算Nova→2.nova组件详解→2.nova-scheduler
  5. html table导出到Excel中,走后台保存文件,js并调用另保存
  6. Ubuntu samba 安装与配置 实现windows和虚拟机中的Ubuntu共享文件
  7. 解决ssh登录慢的问题
  8. git删除远程仓库的文件或目录
  9. indexOf和lastIndexOf的使用
  10. 查看现有运行的linux服务器有多少内存条