传说中的Linux三剑客命令之sed(三剑客老二)别人只知道了而我却做到了

传说中的Linux三剑客命令之sed(三剑客老二)别人只知道了而我却做到了

sed(三剑客老二)

1. 简介

sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed’s ability to filter text in a pipeline which particularly distinguishes it from other types of editors.
sed是一个流编辑器。流编辑器用于对输入流(来自管道的文件或输入)执行基本的文本转换。虽然在某些方面类似于允许脚本化编辑的编辑器(如ed),sed的工作原理是只对输入进行一次传递,因此效率更高。但是sed在管道中过滤文本的能力使它与其他类型的编辑器特别不同。(来自百度翻译)

2.工作过程

sed编辑器逐行处理文件(或输入),并将输出结果发送到屏幕。sed的命令就是在vi和ed/ex辑器中见到的那些。sed把当前正在处理的行保存在一个临时缓存区中,这个缓存区称为模式空间或临时缓冲。sed处理完模式空间中的行后(即在该行上执行sed命令后),就把改行发送到屏幕上(除非之前有命令删除这一行或取消打印操作)。sed每处理完输入文件的最后一行后,sed使结東运行。sed把每一行都存在临时缓存区中,对这个副本进行编辑,所以不会修改或破坏源文件。

3.定位参数

定位符功能描述
first~stepfirst指起始匹配行,step指步长,例如:sed -n 2~5p 含义:从第二行开始匹配,隔5行匹配一次,即2,7,12…
$表示匹配最后一行
/REGEXP/表示匹配正则那一行,通过//自己的正则来匹配
\cREGEXPc表示匹配正则那一行,通过\c和c之间的正则来匹配,c可以是任一字符
addr1,addr2定址addr1,addr2决定用于对哪些行进行编辑,地址的形式可以是数字,正则表达式或二者的结合,如果没有指定地址,sed将处理输入文件中的所有行,如果定址是一个数字,则这个数字代表行号,如果是逗号分隔两个行号,那么需要处理的定址就是两行之间的范围(包括两行在内),范围可以是数字,正则或二者组合.
addr1,+N从addr1这行到忘下N行匹配,总共匹配N+1行
addr1,~N将匹配addr1和addr1后面的行,直到下一行的输入行号是N的倍数。

4.正则表达式

元字符功能示例示例匹配的对象
^行首定位符/^root/匹配所有以root开头的行
$行尾定位符/root$/匹配所有以root结尾的行
.匹配除换行外的单个字符/r…t/匹配字母r,然后两个任意字符,再以t结尾的行,比如root,rout等
*匹配0个或多个前导字符(包括回车)/r*oot/匹配0个或多个r之后紧跟着oot的行,比如oot,rrroot等
[]匹配指定字符组内任意字符/[LI]oot/匹配包含root和Root的行
[^]匹配不在指定字符组内的任意一个字符/[^A-KM-Z]oot/匹配包含oot,但oot之前的那个字符不在A至K或M至Z间的行
\(…\)保存已匹配的行
&保存查找串以便在替换串中引用s/root/**&**/符号&代表查找串,字符串root将替换前后各加了练个**的引用,即root变成**root**
\<词首定位符/\<root/匹配包含以root结尾的单词的行
\>词尾定位符/root\>/匹配包含以root结尾的单词的行
x{m\}连续m个x/o\{5\}/匹配出现连续5个字母o行
x{m,\}至少m个x/o\{5,\}/匹配至少出现连续5个字母o行
x{m,n\}至少m个x,但不超过n个x/o\{5,10\}/匹配出现5至10个字母o行

5.常用选项

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

6.操作命令

命令说明
a\当前行后添加一行或多行
c\用新文本修改(替换)当前行中的文本
d删除行
i\在当前行之前插入文本
h把模式空间里的内容复制到暂存缓存区
H把模式空间里的内容追加到暂存缓存区
g取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容
G取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面
l列出非打印字符
p打印行
n读入下一输入,并从下一条命令而不是第一条命令开始处理
q结束或退出 sed
r从文件中读取输入行
!对所选行意外的所有行应用命令
s用一个字符串替换另一个
w将行写入文件
x交换暂存缓冲区与模式空间的内容
y将字符转换为另一字符(不能对正则表达式使用y命令)

以上内容来源。1


  1. 参考《跟老男孩学Linux三剑客命令V1》第二章 Sed讲解 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值