流编辑器sed

流编辑器sed


1 sed命令基础


sed是一个行编辑器,它的工作过程是,首先将文件分成以行为单位,然后将每一行逐次的放入缓冲区(模式空间),sed将其处理完毕后发送到标准输出,处理完最后一行sed便运行结束。由于sed是对存储在缓冲区的文件进行编辑,因此,sed不会修改或者损坏正在编辑的文件。


sed命令格式:


sed [option] 'command' filemame


1.1 option


sed的可选参数比较少,主要就是下面这几个。


-e允许多项编辑
-f指定sed脚本文件
-n取消默认的输出


1.2 command


不同于grep的pattern,这里command不仅包含了正则表达式所匹配的模式,而且还包含了对匹配进行处理的命令。同时,sed的匹配是以‘/’开头和结尾的,中间包含着对文本的匹配模式,如/less/就是匹配所有以less开头的行。而在匹配之后跟着的是对匹配结果的处理命令,例如/less/d就是将所有以less开始的行删除。命令如下:


d删除一行
i\在当前行插入文本
a\在当前行添加一行或者多行
p打印该行
s用以个字符串替换另一个
g全局替换
w将行写入文件
l列出非打印字符
r从文件中读取输入行
q结束或推出sed


1.3 filename


sed一般只处理一个文件。


1.4 关于缓冲区和暂存缓冲区的区别


正常情况下,sed将文件以行为单位放入缓冲区,然后按照指令进行操作,最后发送到标准输出。但是,sed拥有一个暂存缓冲区,它可以将缓冲区的内容保存到暂存缓冲区中,等到合适的时候再放入缓冲区。使用它们的命令与hgx,其中,命令h将选中的内容放入暂存缓冲区,g命令将内容发回缓冲区,而x命令则是将缓冲区和暂存区的内容互换。


2 实例


2.1 删除文件中的XX行


~$ sed '1,3d' test

       5   File formats and conventions eg /etc/passwd
       6   Games
       7   Miscellaneous  (including  macro  packages  and  conventions), e.g.
           man(7), groff(7)
       8   System administration commands (usually only for root)
       9   Kernel routines [Non standard]
# 删除文件的第一到三行
~$ sed '/calls/d' test 

       4   Special files (usually found in /dev)
       5   File formats and conventions eg /etc/passwd
       6   Games
       7   Miscellaneous  (including  macro  packages  and  conventions), e.g.
           man(7), groff(7)
       8   System administration commands (usually only for root)
       9   Kernel routines [Non standard]
# 删除包含calls的行


2.2 打印文件的XX行

~$ sed -n '1,3p' test

       2   System calls (functions provided by the kernel)
       3   Library calls (functions within program libraries)
       4   Special files (usually found in /dev)
# 打印1-3行
~$ sed -n '/calls/p' test
       2   System calls (functions provided by the kernel)
       3   Library calls (functions within program libraries)
# 打印包含calls的行


2.3 替换文件中的XX行

~$ sed -n 's/kernel/hello/p' test

       2   System calls (functions provided by the hello)
# 将kernel替换为hello


其实关于sed的命令还有很多,但是只要你掌握了基础用法,其它的照着模子就能刻出来。而且sed无非就是grep的升级版,它不仅可以匹配,而且能将匹配的行作出某种修改,但是sed仍有局限。它不能将每一行分成若干单位进行处理,这时候awk就起到作用了,下一节会专门介绍awk实用程序。


3 回顾


3.1 将所有包含Sam的行打印

sed -n '/Sam/p' file


3.2 删除包含Sam的行

sed '/Sam/d' file


3.3 删除从Sam行开始到Tom行结束之间所有的行

sed '/Sam/,/Tom/d' file


3.4 删除第1行到第5行之间所有的行

sed '1,5d' file


3.5 删除所有不包含Sam的行

sed '/Sam/!d' file


3.6 将包含Sam行的love改成hate

sed '/Sam/s/love/hate/g' file


3.7 删除每行前4个字符

sed 's/....//' file


3.8 删除每行后三个字符

sed 's/...$//' file


3.9 将所有包含Sam的行写入new文件中

sed -n '/Sam/w new' file


3.10 将所有的包含functions的行替换成funchello

sed 's/\(func\)tions/\1hello/' file


4 总结


sed作为一个行为单位进行编辑的工具,使得其可以编辑相当大的文件,不会存在像vi那样打不开文件的情况;除此之外,sed在对文件进行编辑的过程中,并不会破坏源文件,因此可以放心的使用。




Date: 2012-09-09 日

Author: hic

Org version 7.9.1 with Emacs version 23

Validate XHTML 1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值