红联Linux门户
Linux帮助

Linux脚本Bash中的文本利器-sed

发布时间:2015-02-20 21:29:57来源:linux网站作者:linux人

sed并不会改变原文件,所以的操作是原文件的一个拷贝,可以将结果重定向到新文件。在使用的时候用的最多的是三种方式(在命令行键入命令;将 s e d命令插入脚本文件,然后调用 s e d;将s e d命令插入脚本文件,并使s e d脚本中的一种)中的命令行键入方式。

格式:

sed [选项] s e d命令 输入文件。

*选项

---------------------------------------------------------

s e d选项如下:

n 不打印;s e d不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。

p 命令可以用来打印编辑行。

c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条 s e d命令,

此选项无用,但指定它也没有关系。

f 如果正在调用s e d脚本文件,使用此选项。此选项通知 s e d一个脚本文件

支持所有的s e d命令,例如:sed -f myscript.sed input_file,这里m y s c r i p t . s e

d即为支持s e d命令的文件。

---------------------------------------------------------

*查找匹配

使用s e d在文件中定位文本的方式:

---------------------------------------------------------

x x为一行号,如1

x , y 表示行号范围从x到y,如2,5表示从第2行到第5行

/ p a t t e r n / 查询包含模式的行。例如/ d i s k /或/[a-z]/

/ p a t t e r n / p a t t e r n / 查询包含两个模式的行。例如/ d i s k

/ d i s k s /

p a t t e r n / , x 在给定行号上查询包含模式的行。如/ r i b b o n / , 3

x , / p a t t e r n / 通过行号和模式查询匹配行。3 ,/ v d u /

x , y ! 查询不包含指定行号x和y的行。1 , 2 !

---------------------------------------------------------

sed编辑命令:

---------------------------------------------------------

*p 打印匹配行

sed '/np' in.txt

sed '/pattern/'p in.txt

*= 显示文件行号

sed -e '/pattern/=' in.txt (all lines)

sed -n '/pattern/=' in.txt (only cared lines)

*a \ 在定位行号后附加新文本信息

sed [address]a\

*i \ 在定位行号后插入新文本信息

sed [address]i\

*d 删除定位行

[ a d d r e s s [,a d d r e s s ] ] d

*c \ 用新文本替换定位文本

[ a d d r e s s [,address]] s/ pattern-to-find /replacement-pattern/

[g p w n]

*s 使用替换模式替换相应模式

sed -n '/op/np &/p' text.txt

*r 从另一个文件中读文本

sed '/begin-pattern./r in.txt' out.txt

*w 写文本到一个文件

sed '/begin-pattern/ w in.txt' out.txt

*q 第一个模式匹配完成后推出或立即推出

ex: sed '/.a.*/q' in.txt

*l 显示与八进制A S C I I代码等价的控制字符

{ } 在定位行执行的命令组

n 从另一个文件中读文本下一行,并附加在下一行

g 将模式2粘贴到/pattern n/

y 传送字符

n 延续到下一输入行;允许跨行的模式匹配语句

---------------------------------------------------------

*快速一行命令

---------------------------------------------------------

‘s / \ . $ / / g’ 删除以句点结尾行

‘-e /abcd/d’ 删除包含a b c d的行

‘s / [ ] [ ] [ ] * / [ ] / g’ 删除一个以上空格,用一个空格代替

‘s / ^ [ ] [ ] * / / g’ 删除行首空格

‘s / \ . [ ] [ ] * / [ ] / g’ 删除句点后跟两个或更多空格,代之以一个空格

‘/ ^ $ / d’ 删除空行

‘s / ^ . / / g’ 删除第一个字符

‘s /CO L \ ( . . . \ ) / / g’ 删除紧跟C O L的后三个字母

‘s / ^ \ / / / g’ 从路径中删除第一个\

‘s / [ ] / [ ] / / g’ 删除所有空格并用t a b键替代

‘S / ^ [ ] / / g’ 删除行首所有t a b键

‘s / [ ] * / / g’ 删除所有t a b键

---------------------------------------------------------