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


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 表示行号范围从xy,如25表示从第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 ! 查询不包含指定行号xy的行。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

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

相关内容