sed

1、工作方式: 按顺序逐行将文件读入到内存中。然后,它执行为该行指定的所有操作,并在完成请求的修改之后将该行放回到内存中,以将其转储至终端。完成了这一行上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件。如同前面所提到的,默认输出是将每一行的内容输出到屏幕上。在这里,开始涉及到两个重要的因素—首先,输出可以被重定向到另一文件中,以保存变化;第二,源文件(默认地)保持不被修改。sed默认读取整个文件并对其中的每一行进行修改。不过,可以按需要将操作限制在指定的行上。
2、基本语法:
(1)直接调用:
sed [options] '{command}' [filename]
注意单引号内部都是命令
(2)脚本文件:
sed -f sedscript [filename]
注意sedscript中每一行为一个{command},只不过不需要加单引号
3、基本操作:
(1)对同一行多个编辑任务:
sed 's/{old value 1}/{new value 1}/;s/{old value 2}/{new value 2}/'
注意在{command}中用分号隔开不同的命令结构,分号必须紧跟斜线之后的下一个字符,不能有空格。
(2)替换:
sed 's/{old value}/{new value}/'
(3)全局修改:
sed 's/{old value}/{new value}/g'
注意sed通常只对第一个匹配位置进行操作,当同一行中有多个匹配的表达式需要修改时,须指定为全局修改
(4)条件修改:
sed '/{condition}/ s/{old value}/{new value}/'
注意只有行中可匹配{condition}时,才会对此行的匹配表达式进行操作
(5)限制修改操作行:
sed 'num1[,num2] s/{old value}/{new value}/'
注意当使用两个行号时,是对两个行号之间的所有行进行操作
(6)删除匹配内容:
sed '/{value}/d'
注意要删除整个行时,可以直接用行号'num d'来执行;另外删除含{value}以外的所有行可以用sed '/{value}/!d'
(7)插入文本:
sed 'num[ai] {text}'
注意a与i的差别在于a是插入在指定行的下一行,而i直接插在指定行
(8)打印内容:
sed '/value/p'
注意p命令表示出了把原文件打印出来的同时,如果某行满足匹配条件,则将此行重复打印一遍;如果只希望打印匹配的行,可以加上-n选项
(9)提前退出:
sed '{command1};/{value}q/'
注意需要在执行到文尾之前退出时可以通过包含{value}的行控制,也可以直接用行号控制
4、元字符集:
^:行开始
$:行结束
.:一个非换行符的字符
*:零个或多个字符
&:隐含变量保存搜索的字符,如s/love/I&U/将love替换成IloveU
x/{num/}:重复x字符num次,如/0/{4/}/匹配4个0的行
x/{num,/}:重复x字符至少num次,如/0/{4/}/匹配至少4个0的行
x/{num1,num2/}:重复x字符至少num1次至多num2次
5、典型操作:
(1)在每行后面增加一空行:sed 'G'
(2)在每行后面增加两空行:sed 'G;G'
(3)在匹配的行之前插入一空行:sed '/{value}/{x;p;x;}'
(4)倒置所有的行(第一行变为最后一行):sed '1!G;h;$!d' 或者 sed -n '1!G;h;$p'
(5)将行中所有字符逆序(第一个字符变为最后一个字符):sed '//n/!G;s//(./)/(.*/n/)/&/2/1/;//D;s/.//'
(6)为数字字串增加逗号分隔符号:sed -e :a -e 's//(.*[0-9]/)/([0-9]/{3/}/)//1,/2/;ta'
(7)删除空行:sed '/^$/d'或者sed '/./!d'
(8)删除文件顶部的所有空行:sed '/./,$!d'
(9)删除文件尾部的所有空行:sed -e :a -e '/^/n*$/{$d;N;ba' -e '}'
6、Little Tips:
(1)sed 's/foo/bar/g' filename比sed '/foo/ s/foo/bar/g' filename执行速度慢
(2)sed -n '45,50p' filename比sed -n '51q;45,50p' filename执行速度慢


Referrence:
http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/sed.htm sed学习笔记
http://www.oracle.com/technology/global/cn/pub/articles/dulaney_sed.html 使用sed编辑器
http://sed.sourceforge.net/sed1line_zh-CN.html  SED单行脚本快速参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值