当前位置:网站首页>shell三剑客之sed命令
shell三剑客之sed命令
2022-08-10 03:26:00 【芒地狠】
一、sed介绍
sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务。
sed 的工作流程主要包括读取、执行和显示三个过程。
读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,patternspace)。
执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。
显示:发送修改后的内容到输出流。再发送数据后,模式空间将会被清空。
在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
注意:默认情况下,所有的 sed 命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。
二、sed常见用法
通常情况下调用sed命令有两种格式,如下所示。其中,“参数”是指操作的目标文件,当存在多个操作对象时,文件之间用逗号“,”分隔;而scriptfile表示脚本文件,需要用“-f”选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件
sed [选项] '操作' 参数
sed [选项] -f scriptfile 参数
1、常见的 sed 命令选项
选项 | 功能 |
---|---|
-e | 表示用指定命令或者脚本来处理输入的文本文件 |
-f | 表示用指定的脚本文件来处理输入的文本文件 |
-h | 显示帮助 |
-n | 表示仅显示处理后的结果 |
-i | 直接编辑文本文件 |
-r或-E | 使用扩展正则表达式 |
-s | 将多个文件视为独立文件,而不是单个连续的长文件流 |
2、常见的sed操作指令
“操作”用于指定对文件操作的动作行为,也就是 sed 的命令。通常情况下是采用的“[n1[,n2]]”操作参数的格式。n1、n2 是可选的,不一定会存在,代表选择进行操作的行数,如操作需要在 5~20 行之间进行,则表示为“5,20 动作行为”。常见的操作包括以下几种。
a | 增加,在当前行下面增加一行指定内容 |
c | 替换,将选定行替换为指定内容 |
d | 删除,删除选定的行 |
i | 插入,在选定行上面插入一行指定内容 |
p | 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用 |
s | 替换,替换指定字符 |
y | 字符转换 |
三、sed案例
1、sed一般用法
①sed -n "p" test.txt 等同于 cat test.txt
②sed -n "2p" test.txt #输出第2行内容
③sed -n "2,5p" test.txt #输出第2到5行的内容
④输出所有奇数行,n 表示读入下一行资料 sed -n "p;n" 3.sh
⑤输出偶数行 sed -n "n;p" 3.sh
⑥输出1-5行的奇数行
sed -n '1,5{1~2p}' 3.sh 输出1-5行的奇数行
sed -n '1,5{2~2p}' 3.sh 输出1-5行的偶数行
⑦输出第10行到文件尾的偶数行 sed -n '10,${n;p}' 3.sh
⑧sed -n "1,+3p" 3.sh 从第1行开始连续输出1-4行
2、sed结合正则表达式输出指定行
sed 命令结合正则表达式时,格式略有不同,正则表达式以“/”包围。
注:如果遇到特殊符号的情况,扩展正则还需要转义字符“\”。
①sed -n '/the/p' test.txt 输出宝行
②输出从第四行开始包含the的行 sed -n '4,/the/p' test.txt
③输出包含the 的行所在的行号,等号(=)用来输出行号
④输出以PI 开头的行 sed -n '/^PI/p' test.txt
⑤输出以数字结尾的行 sed -n '/[0-9]$/p' test.txt
⑥输出包含单词wood 的行,\<、\>代表单词边界 sed -n '/\<wood\>/p' test.txt
3、删除符合条件的文本(d)
①nl test.txt | sed '3d' 或者 sed '3d' test.txt 或者sed -i '3d' test.txt
#-i会对文本直接进行修改
#删除第三行
②删除第 3~5 行且显示行号 nl test.txt | sed '3,5d'
③ //删除包含cross 的行,原本的第 8 行被删除
//删除不包含the 的行,用 ! 符号表示取反操作,如'/the/!d'
④删除以小写字母开头的行 sed '/^[a-z]/d' test.txt
⑤删除以 "." 结尾的行 sed '/\./d' test.txt
⑥删除所有空行 sed '/^$/d' test.txt
注意: 若是删除重复的空行,即连续的空行只保留一个, 执行“ sed –e ‘/^$/{n;/^$/d}’test.txt”命令即可实现。其效果与“cat -s test.txt”相同,n 表示读下一行数据。
4、插入符合条件的行
①在第2行上插入你好 sed '2i 你好' test.txt
边栏推荐
猜你喜欢
matlab simulink response spectrum calculation
leetcode-218.天际线问题
How to quickly become a software test engineer?What skills do testers need for a monthly salary of 15k?
zabbix添加监控主机和自定义监控项
Shell 文本三剑客 awk
互联网公司高频面试题精讲:测试计划和测试方案有什么区别?
plsql 查询数据库操作历史记录(Ctrl + e)
The so-called software testing ability is actually these 5 points
【2022河南萌新联赛第(五)场:信息工程大学】【部分思路题解+代码解析】
NFG电商系统在元宇宙趋势下做什么?
随机推荐
小程序导航及导航传参
leetcode 27:移除元素
Jackson的ObjectMapper在项目中的主要运用
Camera partial update
PC摄像头设置 默认摄像头设置 win11 默认摄像头设置
数据库设计中反映用户对数据要求的模式叫什么
一文教会你快速上手 Vim
shell文本编辑awk
同样是初级测试,凭什么他比我薪资高 5000 块?
BFF避坑指南
Kettle 裁剪表详解(truncate)
cuda——nms
Basic understanding of network models
YAPI使用
程序国际化
微信小程序相互跳转如何携带参数
【IO复用】poll
书法家唐效奇
ES高亮显示语法
中国人保为德科康材承保产品责任险,为消费者权益保驾护航!