Linux sed 追加转换退出更新修改转换命令使用案例

声明与简介

sed:Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑器。

sed其它命令汇总主要涉及i(insert)插入、a(append)追加、c(change)更新、l隐藏字符、=等号、q(quit)退出执行、y转换、r(read)读等命令。命令的详细使用说明见下文。

本文主要以实际的数据来介绍sed的substitude(替换)即s命令的使用。

数据说明

如下是使用的示例文本数据,这里的行号是为了方便解释结果,不是文本内容。

1 7369,smith,clerk,7902,'1980-12-17',800,null,20
2 7499,allen,salesman,7698,'1981-2-20',1600,300,30
3 7521,ward,salesman,7698,'1981-2-22',1250,500,30
4 7566,jones,manager,7839,'1981-4-2',2975,null,20
5 7654,martin,salesman,7698,'1981-9-28',1250,1400,30
6 7655,jack,manager,7698,'1987-3-28',1600,1800,10
7 7656,tim,clerk,7902,'1982-12-12',1400,1400,30
8 7657,kate,clerk,7902,'1989-11-11',1400,1800,10
9 7698,blake,manager,7839,'1981-5-1',2850,null,30
10 7699,dlake,salesman,7839,'1983-6-15',3000,null,10
11 7782,clark,manager,7839,'1981-1-9',2450,null,10
12 7788,scott,analyst,7566,'1982-12-9,3000,null,20,scott
13 7839,king,president,null,'1981-11-17',5000,null,10
14 7844,turner,salesman,7698,'1981-12-8',1500,0,30
15 7876,adams,clerk,7788,'1983-1-12',1100,null,20
16 7900,james,clerk,7698,'1981-12-3',950,null,30
17
18 --7902,ford,analyst,7566,'1981-12-3',3000,null,20
19
20 7934,miller,clerk,7782,'1982-1-23',1300,null,10

插入命令

在某行前插入

# 1在第2行前插入一行新的内容。
sed '2 i well new content' emp.txt# 结果
7369,smith,clerk,7902,'1980-12-17',800,null,20
well new content
7499,allen,salesman,7698,'1981-2-20',1600,300,30#注:1 这里也支持插入\n即换行符。
#    2 这里的i即是insert。

追加命令

在某行后插入

# 1 在第2行后插入一行新的内容。。
sed '2 a well new content\n' emp.txt# 部分数据,最后有个换行符。
7369,smith,clerk,7902,'1980-12-17',800,null,20
7499,allen,salesman,7698,'1981-2-20',1600,300,30
well new content#注:1 这里的a即是append。

在文末插入内容

# 2 在文件的最后一行追加一行内容,插入类似(换成i)sed '$ a well new content\n' emp.txt#注: 在文件第一行插入不可以用^匹配,可以用如下命令(指定行号为1):sed '1 i well new content\n' emp.txt

插入多行记录

# 3 在第一行前两行内容。这里也可以是i,即在行号前插入。
sed '1 a well new content\
line2' emp.txt# 注: 这里需要换行输入,而不能合并成一行。

更新命令

对应行更新

# 1 对指第2行做内容的更新
sed '2 c well new content' emp.txt
# 结果
7369,smith,clerk,7902,'1980-12-17',800,null,20
well new content#注:更新命令一般是结合-i命令(修改源文件章节)一起使用。

匹配关键字行更新

# 2 匹配到scott关键字并将该行用新的内容更新。
sed '/scott/ c well new content' emp.txt# 数据,未显示全部
7782,clark,manager,7839,'1981-1-9',2450,null,10
well new content
7839,king,president,null,'1981-11-17',5000,null,10# 原始数据
7782,clark,manager,7839,'1981-1-9',2450,null,10
7788,scott,analyst,7566,'1982-12-9,3000,null,20,scott
7839,king,president,null,'1981-11-17',5000,null,10

插入追加更新结合使用

# 3 对匹配到scott的行同时实施插入、追加、更新操作。
sed '/scott/{
a\
append record
i\
insert record
c\
chang record
}' emp.txt

修改源文件

直接修改源文件

# 1 用关键字TTOCC替换scott并直接作用原始文件emp.txt
sed -i 's/scott/TTOCC/' emp.txt# 查看文件是否已更新
cat emp.txt | grep TTOCC# 可见emp.txt内容已经更新
7788,TTOCC,analyst,7566,'1982-12-9',3000,null,20

等宽度截断

# 2 该方式是对隐藏字符的扩展,即对每行按照指定的长度(20个)进行截取,以“\”显示,行内容长度不足的以$显示。
sed -n 'l 20' emp.txt# 示例数据
7369,smith,clerk,79\
02,'1980-12-17',800\
,null,20$
7499,allen,salesman\
,7698,'1981-2-20',1\
600,300,30$#原始数据(部分)
7369,smith,clerk,7902,'1980-12-17',800,null,20
7499,allen,salesman,7698,'1981-2-20',1600,300,30

等于命令

打印行号

# 打印文件内容的行号,注意行号每行占一行。
sed = emp.txt#结果,( 示例数据)
1
7369,smith,clerk,7902,'1980-12-17',800,null,20
2
7499,allen,salesman,7698,'1981-2-20',1600,300,30
3
7521,ward,salesman,7698,'1981-2-22',1250,500,30

指定范围打印行号

#仅仅对第3和5行打印行号,其它的行不做处理(正常显示文件内容)。
sed '3,5 =' emp.txt# 结果,(示例数据)
7369,smith,clerk,7902,'1980-12-17',800,null,20
7499,allen,salesman,7698,'1981-2-20',1600,300,30
3
7521,ward,salesman,7698,'1981-2-22',1250,500,30
4
7566,jones,manager,7839,'1981-4-2',2975,null,20
5
7654,martin,salesman,7698,'1981-9-28',1250,1400,30
7655,jack,manager,7698,'1987-3-28',1600,1800,10

匹配到关键字的行打印行号

#匹配到关键字”scott”的行打印行号,其它的行不做处理(正常显示文件内容)。
sed '/scott/ =' emp.txt# 结果,(示例数据)
7782,clark,manager,7839,'1981-1-9',2450,null,10
12
7788,scott,analyst,7566,'1982-12-9,3000,null,20,scott
7839,king,president,null,'1981-11-17',5000,null,10

打印文件总行数

#结合打印行号和之前sed的相关功能,不能发现可通过$结合=计算出文件的总行数。
sed -n '$ =' emp.txt#结果
20

转换命令

字符转换

#这里的y命令相当于对字符进行对应的转换,比如这里的s转成D、s转出V。这里类似translate函数。
sed 'y/sc/DV/' emp.txt# 结果,转换后的示例数据
7788,DVott,analyDt,7566,'1982-12-9,3000,null,20,DVott#原始数据里是scott
7788,scott,analyst,7566,'1982-12-9,3000,null,20,scott

多文件操作命令

多文件一起执行

# 同时匹配两个文件里的manager关键字。
sed -n '/manager/p' employee.txt emp.txt

退出执行命令

显示文件第一行退出

# 通过q命令只显示文件的第一行,即只到第1行就退出了执行。
sed 'q' emp.txt#结果
7566,jones,manager,7839,'1981-4-2',2975,null,20# head命令对比
head -1 emp.txt#结果
7566,jones,manager,7839,'1981-4-2',2975,null,20#当然也可以通过P命令显示第一行
sed -n '1 p' emp.txt

执行到指定行后退出

#通过q命令只显示文件的第一行,即从第1行显示到第5行就退出了执行。
sed '5 q' emp.txt#结果
7369,smith,clerk,7902,'1980-12-17',800,null,20
7499,allen,salesman,7698,'1981-2-20',1600,300,30
7521,ward,salesman,7698,'1981-2-22',1250,500,30
7566,jones,manager,7839,'1981-4-2',2975,null,20
7654,martin,salesman,7698,'1981-9-28',1250,1400,30# 指定范围行退出执行仅支持单行号,如果指定行首和行尾两个参数则报错。详见下:
#sed '7,12 q' emp.txt
sed: -e expression #1, char 6: command only uses one address

匹配关键字后退出执行

#首次匹配到manager后退出执行。
sed '/manager/q' emp.txt# 执行结果
7369,smith,clerk,7902,'1980-12-17',800,null,20
7499,allen,salesman,7698,'1981-2-20',1600,300,30
7521,ward,salesman,7698,'1981-2-22',1250,500,30
7566,jones,manager,7839,'1981-4-2',2975,null,20

读命令

读文件追加内容

# 读取文件file_tmp.txt的内容追加到emp.txt之后
sed '$ r file_tmp.txt' emp.txt

读文件匹配关键字后追加内容

# emp.txt里匹配到关键字manager之后插入文件file_tmp.txt的内容
sed -n '/manager/ r file_tmp.txt' emp.txt# 结果,部分示例内容
7655,jack,manager,7698,'1987-3-28',1600,1800,10
/usr/apps/bin:/usr/local/bin:/root/
/usr/local/sbin:/usr/apps/sbin:/opt/bin
7656,tim,clerk,7902,'1982-12-12',1400,1400,30
7657,kate,clerk,7902,'1989-11-11',1400,1800,10
7698,blake,manager,7839,'1981-5-1',2850,null,30
/usr/apps/bin:/usr/local/bin:/root/
/usr/local/sbin:/usr/apps/sbin:/opt/bin
7699,dlake,salesman,7839,'1983-6-15',3000,null,10

打开高效文本编辑之门_Linux Sed插入追加转换退出等命令应用相关推荐

  1. 打开高效文本编辑之门_Linux sed之多行命令与循环命令

    Linux sed之多行命令与循环命令使用案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器. sed模式匹配是对文件的一 ...

  2. 打开高效文本编辑之门_Linux Sed模拟常见文件命令

    Linux sed 实现grep cat wc tail命令的效果对比案例 声明与简介 sed:Stream Editor文本流编辑器,sed是一个"非交互式的"面向字符流的编辑器 ...

  3. 打开高效文本编辑之门_Linux sed之模式空间与保留空间

    Linux sed之模式空间保留空间使用案例 声明与简介 sed:Stream Editor文本流编辑器,sed是一个"非交互式的"面向字符流的编辑器.本文主要结合数据以案例形式介 ...

  4. 打开高效文本编辑之门_Linux awk之关联数组

    Linux awk之关联数组使用案例 声明与简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具.awk通常用来处理结构化(固定格式)的文本文件, awk每接收文件的一行,然后执行相应的命 ...

  5. 打开高效文本编辑之门_Linux awk之自定义变量与操作符

    Linux awk之自定义变量与操作符 声明与简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具.awk通常用来处理结构化(固定格式)的文本文件, awk每接收文件的一行,然后执行相应的 ...

  6. 打开高效文本编辑之门_Linux Awk之条件判断与循环

    Linux awk之条件判断与循环 声明与简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具.awk通常用来处理结构化(固定格式)的文本文件, awk每接收文件的一行,然后执行相应的命令 ...

  7. 打开高效文本编辑之门_Linux Awk自定义变量与操作符

    Linux awk之变量与操作符应用案例 声明与简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具.awk通常用来处理结构化(固定格式)的文本文件, awk每接收文件的一行,然后执行相应 ...

  8. 打开高效文本编辑之门_熟悉Linux Sed的替换命令

    Linux sed S替换命令常见使用案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器.本文主要以实际的数据来介绍sed ...

  9. 打开高效文本编辑之门_调用Linux的sed命令

    Linux sed命令执行方式汇总案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器.Sed的命令执行主要介绍如何引用se ...

最新文章

  1. 整理一下自己手撸的博客
  2. 《LeetCode力扣练习》第13题 C语言版 (做出来就行,别问我效率。。。。)
  3. [转] 机器学习那些事儿
  4. 计算机应用基础18春在线作业1答案,东师计算机应用基础-18春在线作业1.docx
  5. 告知书页面html样式,后院通知编辑页面.html
  6. js添加事件 attachEvent 和addEventListener的用法
  7. Spring Boot 文件上传功能实现与简单示例
  8. python 识别图形验证码_python爬虫20 | 小帅b教你如何用python识别图片验证码
  9. 深入学习Java虚拟机(三)
  10. OpenSSL笔记-PKCS#1和PKCS#8的区别及分别调用的API
  11. 维护两个互斥的定价条件
  12. PCL implicit shape model 做目标识别分类
  13. Docker方式部署Github监控系统Hawkeye
  14. clear:both在HTML页面中的用法
  15. 码元,数据传输速率,带宽,信噪比,信道容量
  16. Go语言如何实现删除Winmail邮箱系统中收件箱的所有邮件
  17. # cs231n (四)反向传播
  18. [置顶] 我的私房IT学习网站
  19. 一文了解前端与全栈工程师!
  20. 逻辑树与视觉树基本概念

热门文章

  1. VTK:vtkBandedPolyDataContourFilter用法实战
  2. OpenCASCADE绘制测试线束:形状修复命令之一般命令
  3. OpenCASCADE:拓扑 API之缝纫
  4. wxWidgets:wxRibbonGallery类用法
  5. boost::spirit模块实现利用 Karma 生成器的替代方案和内置匹配功能的测试程序
  6. boost::python::detail::is_string_literal相关的测试程序
  7. boost::format模块测试格式与枚举一起使用
  8. boost::callable_traits的has_member_qualifiers的测试程序
  9. VTK:PolyData之SurfacePointPlacer
  10. VTK:PolyData之ProcrustesAlignmentFilter