打开高效文本编辑之门_Linux Sed插入追加转换退出等命令应用
2021/6/1 7:25:47
本文主要是介绍打开高效文本编辑之门_Linux Sed插入追加转换退出等命令应用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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插入追加转换退出等命令应用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23linux 系统宝塔查看网站访问的命令是什么?-icode9专业技术文章分享
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南