文章目录

  • 前言
  • 语法格式
  • sed 操作地址
  • sed子命令
  • sed正则表达式
  • sed使用实例
    • 打印命令 p
    • 删除命令 d
    • 替换命令 s
    • 指定操作地址的范围 逗号 ,
    • 多重编辑命令 e
    • 下行插入命令 a
    • 上行插入命令 i
    • 修改命令 c
    • 获取下一行命令 n
    • 转换命令 y
    • 退出命令 q
  • 总结

前言

sed是一个“非交互”式的字符流编辑器,能够很好得完成对多个文件的一系列编辑工作。sed提供的功能好像是交互式脚本的自然延伸,它提供的查找和替换程序可以被全局的应用于单个文件或者一组多个文件之中。

sed相对于交互式的vi/vim编辑器的优点是:

  1. sed能够在一个地方指定所有的编辑指令(查找、替换、删除、插入等),然后通过文件传递一次来执行它们。不必进入每个文件进行修改。
    vi/vim针对以上编辑指令(查找、替换、删除、插入等)则需要消耗大量的时间。

  2. sed能够保持整个文档的一致性。可以通过查找某一个特定术语的所有不同的使用方式,使得它们能够变得一致

  3. sed支持编写大量的转换程序

总结:sed能够让我们在批量处理不同模式的文件(查找、替换、删除、插入等)时更为便捷


语法格式

sed [OPTION]... {script-only-if-no-other-script} [input-file]...


选项 说明

  • -n 使用安静模式,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印被 sed 特殊处理的行
  • -e 多重编辑,且命令顺序会影响结果
  • -f 指定一个 sed 脚本文件到命令行执行,
  • -r Sed 使用扩展正则
  • -i 直接修改文档读取的内容,不在屏幕上输出

sed 操作地址

sed在没有指定操作行范围时,默认操作所有行

  • number 仅仅匹配指定的行号,并进行操作;比如使用安静模式,打印某一个文件的第十行sed -n 10p test.txt
  • first~step 匹配从first起始,每隔step行匹配一次;比如sed -n 2~5p test.txt 表示从第二行开始,每隔5行打印一次,即打印:2,7,12,17…行
  • $ 匹配最后一行 sed -n '$'p test.txt
  • /REGEXP/ 这个是表示匹配正则那一行,通过//之间的正则来匹配, sed -n /[0-9]/p test.txt 匹配包含0-9中任意数字的行
  • \cREGEXPc 这个是表示匹配正则那一行,通过\c 和 c 之间的正则来匹配,c 可以是任一字符 sed -n '\m[0-9]m'p test.txt 匹配包含0-9中任意数字的行
  • 0,addr2 从首行开始,直到找到addr2,这里addr2需要为正则时,0才能够生效;类似于1,addr2从第一行开始。 其中addr2可以为数字,字符串,正则表达式;sed -n 0,/[0-9]/p test.txt ,这里addr2为正则,所以可以从0开始;
  • addr1,+N 从 addr1 这行到往下 N 行匹配,总共匹配 N+1 行;sed -n /[0-9]/,+5p test.txt 从第一个包含数字的行开始向下找5行
  • addr1,~N 从addr1这一行向下匹配,直到匹配行号中包含N的倍数即打印;sed -n /[0-9]/,~7p test.txt ,即匹配包含数字的行号开始,到某一个行号能够被7整除为止

sed子命令

sed子命令主要是操作地址指定的各个行需要执行的方式,如果没有指定操作地址,则默认执行针对所有行

  • = 打印当前筛选出来的行号 sed -n /[0-9]/,~7= test.txt,从test.txt中筛选包含数字的行,且只打印行数
  • a\ 在当前行下添加一行或者多行 sed /[0-9]/,~7a\111 test.txt 向text.txt中包含数字的指定行下添加111字符串
  • i\ 在当前行之上添加一行或者多行 sed /[0-9]/,~7i\111 test.txt 向test.txt中包含数字的指定行上添加111字符串
  • q 结束或者退出sed
  • Q 结束退出sed
  • c\ 用新文本替换(修改)当前行的文本 sed /[0-9]/,~7c\aa test.txt 用aa代替包含数字的文本
  • h 把模式空间的内容复制到暂存空间
  • H 把模式空间的内容追加到暂存空间
  • g 把暂存空间的内容复制到模式空间(用作替换指定行中指定内容的字符串)
  • G 把暂存空间的内容追加到模式空间(用作向指定行中指定内存追加字符串)
  • -l width 列出非打印字符(结束符$,width表示宽度) sed -n /[0-9]/,+7l2 test.txt
  • p 打印行
  • r 从文件中读取输入行
  • ! 对所选行之外的所有行应用命令
  • s/regexp/replacement/ 替换命令
  • d 删除行

sed正则表达式

sed使用实例

制造测试文件如下:top -u ceph -b -n 1|grep PID -A 10 > test.txt

打印命令 p

命令 p 是打印命令,用于显示模式缓存区的内容。默认情况下, sed 把输入行打印在屏幕上,同时将选定内容也打印出来,选项-n 用于取消默认打印操纵。当选项-n 和命令 p 同时出现时, sed 可打印选定的内容
sed '/27023/p' test.txt

sed -n '27023/p' test.txt

删除命令 d

命令 d 用于删除输入行。sed 先将输入行从文件复制到模式缓存区,然后对该行执行 sed命令,最后将模式缓存区的内容显示在屏幕上。如果发出的是命令 d,当前模式缓存区的输入行会被删除,不被显示

sed '27023/d' test.txt 已经删除了2703所在的行,默认会将所有行打印到屏幕

sed '3,$d' test.txt 使用操作地址的命令,删除从第三行开始到行末的所有行

sed '/ceph-osd/d' test.txt 删除所有包含ceph-osd字符串的行

替换命令 s

替换命令s大体的格式为s/regexp/replacement/,s后的第一个字符串包含正则表达式,第二个字符串为需要替换掉的内容;可以使用g标记对行进行全部替换

  1. sed 's/ceph-osd/testsed/g' test.txt 将所有包含ceph-osd的字符串替换为testsed字符串

  2. sed -n 's/^2/3/p' test.txt 将所有开头为2的字符串替换为3,并且使用-n和p命令,仅将替换的字符串打印出来

  3. sed -n 's/osd$/&.sed/p' test.txt 当“与”符号( &)用在替换串中时,它代表在查找串中匹配到的内容以osd结尾时在其后增加字符串.sed

  4. sed -n 's/20/ceph-sed/gp' test.txt 使用g将全局中所有包含20的字符串替换为ceph-sed

  5. sed -n 's/\(ceph\)-osd/\1sed/gp' test.txt 包含在圆括号里的模式 ceph 作为标签 1 保存在特定的寄存器中。替换串可以通过\1 来引用它。则 ceph-osd 被替换为 cephsed

  6. sed -n 's#20#ceph-sed#gp' test.txt sed中s之后的字符就是查找串和替换串之间的分隔符,分隔符默认为正斜杠,但其实只要任意跟在s之后的字符(换行符和反斜线除外)都可以作为分隔符。这个方法在查找包含正斜杠模式时很管用,例如查找路径名或生日

指定操作地址的范围 逗号 ,

sed -n '/ceph-mon/,/ceph-mgr/p' test.txt 指定打印从ceph-mon行开始到ceph-mgr行结束

sed -n '5,/ceph-osd/p' test.txt 打印从第5行开始到ceph-osd所在行结束

sed -n '5,/ceph-osd/s/osd$/sed/gp' test.txt 从第5行开始到遇到ceph-osd字符串所在行之间,将以osd字符串结尾的行替换为以sed结尾

多重编辑命令 e

sed -e '1,3d' -e 's/ceph-osd/ceph-sed/g' test.txt 用于 sed 执行多个编辑任务的情况下。在下一行开始编辑前,所有的编辑动作将应用到模式缓存区的行上。因为是逐行进行这两行编辑(即这两个命令都在模式空间的当前行上执行),所以编辑命令的顺序会影响结果。

下行插入命令 a

a 命令是追加命令,追加将新文本到文件中当前行(即读入模式的缓存区行)的后面。不管是在命令行中,还是在 sed 脚本中, a 命令总是在反斜杠的后面。
sed '/osd$/a\ hello sed' test.txt 在osd结尾的行的下面追加一行hello sed,同时hello sed前增加一个空格

上行插入命令 i

i命令类似于a命令,追加新的文本到文件当前行的前面。
sed '/m[a-z][a-z]$/i\ hello sed' test.txt 在以mon,mgr,mds结尾的行之上增加一行hello world

修改命令 c

c命令可以将已有的文本进行修改,并覆盖旧文本
sed '/m[a-z][a-z]$/c hello sed' test.txt 将mon,mgr,mds结尾的行修改为hello sed,并覆盖原来的行

获取下一行命令 n

n 命令表示下一条命令。 sed 使用该命令获取输入文件的下一行,并将其读入到模式缓冲区中,任何 sed 命令都将应用到匹配行,紧接着的下一行上
sed '/mgr$/{n;s/ceph-osd/ceph-sed/;}' test.txt 将以mgr结尾的下一行中,ceph-osd字符串替换为ceph-sed

转换命令 y

y 命令表示转换。该命令与 tr 命令相似,字符按照一对一的方式从左到右进行转换。例如 y/abc/ABC/,会把小写字母转换成大写字母, a–>A,b–>B,c–>C
sed '1,$y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' test.txt 从头到位,将字符串中小写字母转换为大写字母

退出命令 q

sed '/mgr$/{n;s/ceph-osd/ceph-sed/;q;}' test.txt 执行到替换mgr行的下一行之后就退出,不继续打印

总结

sed的命令的优势不必多言,详细看到并实践到这里的伙伴们已经深有体会。在对多个文件进行批量处理的时候Sed的作用无疑是巨大省时得,但是它并不能对多个不同的模式使用同一套规则进行处理。针对不同的字符串模式,sed需要编写不同的匹配串进行处理,这个时候awk就能够华丽登场,取编写匹配规则进行文本处理。关于awk的系统性整理学习,后期将持续进行。

参考博文:
https://www.cnblogs.com/ginvip/p/6376049.html

s-sed(stream editor) 文本填充和编辑 基本使用相关推荐

  1. linux 大文件编辑sed,Linux高级文本处理工具之sed(一)

    sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器.能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件输入到屏幕,可以把只匹配到模 ...

  2. PMEdit一个富文本框可以编辑文本、并可以显示GIF动画

    PMEdit一个富文本框可以编辑文本.并可以显示GIF动画 发布时间:2013-04-14 发布来源: 护士必必要有同情心和一双愿意工作的手. 一.在开端之前起首吐槽一下,本人是一个自力开辟者,在中国 ...

  3. 文本框可编辑查看页面

    <!DOCTYPE html> <html><head><meta charset="utf-8" /><title>文 ...

  4. 【Linux脚本-sed命令在文本首行和尾行插入空行】

    @[TOC]Linux脚本-sed命令在文本首行和尾行插入空行 Linux脚本-sed命令在文本首行和尾行插入空行 演示如下: 首先创建需要操作的文本文件 //create a file contai ...

  5. 使input文本框不可编辑的3种方法

    转自点击打开链接 今天试了一下使input文本框不可编辑的3种方法,现在总结一下: disabled 属性规定应该禁用 input 元素,被禁用的 input 元素,不可编辑,不可复制,不可选择,不能 ...

  6. Swing文本域的编辑

    1..setEditable(false); 设置文本域不可编辑 2..setHorizontalAlignment(JTextField.CENTER); // 设置文本的水平对齐方式 有效值包括: ...

  7. NLP-预训练模型-2019-NLU+NLG:BART【Bert+GPT的泛化Seq2Seq模型】【噪声破坏后的原文本喂给编码器,解码器输出原文本】【噪音方案:文本填充(文本片段用单个掩码替换)】

    <原始论文:BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translat ...

  8. php编辑框禁止输入,如何设置表单的input文本框不可编辑

    设置表单input文本框不可编辑的方法:首先创建相应的代码文件:然后通过为表单字段设置为"οnfοcus=this.blur(),readonly.disabled"来实现不可编辑 ...

  9. vue 清除 <el-input>当前文本框不能编辑this.$forceUpdate();

    vue 清除 当前文本框不能编辑 在当前文本框添加@change 方法 调用 urlMed() . urlMed() {this.$forceUpdate();}

最新文章

  1. 126篇殿堂级深度学习论文分类整理 从入门到应用 | 干货
  2. 【UOJ#388】【UNR#3】配对树(线段树,dsu on tree)
  3. 第五次作业——软件设计
  4. 你真以为你了解Javascript吗?来试试下面几个
  5. 生成随机字符串的几种常用方式
  6. 计算机网络第五章-运输层学习笔记
  7. 利用 GregorianCalendar 制作当前月的月历
  8. java属性绑定_java基础:10.1 Java FX与属性绑定
  9. 【AtCoder】ARC083
  10. 一个dsp最小系统至少要有_DSP原理及应用(2812)试卷_附答案卷B2(2015城南)
  11. 生信文献学习(part1)--PRECISE: a ... approach to transfer predictors of drug response from pre-clinical ...
  12. 如何使用python批量压缩图片_python 实现图片批量压缩的示例
  13. 点击按钮没反应,或者有时有反应有时没反应
  14. 每个 iOS 开发者都应该关注的 5 个网站
  15. 全球时区查询 API数据接口
  16. 代码随想录30——回溯:332重新安排行程、51N皇后、37解数独
  17. 快来看,这些心理学家与诺贝尔奖有关系
  18. 2022-2027年中国海洋油气开采行业市场全景评估及发展战略规划报告
  19. 鲍尔默:我当CEO时,微软对硬件研发投入真不够
  20. 卧槽!微信可以改彩色昵称了!!!

热门文章

  1. PHP实现XML传输
  2. RanceQuest2_从委托到Lambda_会用(递归数学函数)
  3. OpenCV+python:分水岭算法
  4. 弹道仿真软件_【决战决胜14】看,七部仿真试验室如何降本增效?
  5. 垃圾清理代码_最近弄了个清理电脑C盘的经验
  6. rs232串口驱动_LED驱动电路设计
  7. visual MySQL 教程_MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试...
  8. scrum回顾_Scrum和SAFe之间有什么不同
  9. rpm怎样在win安装mysql_centos7.6安装mysql的正确步骤
  10. 计算机wrod初级考试题及答案,计算机基础知识+Word基础知识+Excel基础知识试题答案解析.doc...