您的位置:首页 > 其它

sed命令基本用法

2014-09-03 10:07 316 查看
sed是一个飞交互式文本编辑器

sed只对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件

调用sed的方法:

①在Shell命令行输入命令调用sed,格式为:

sed [选项] 'sed命令' 输入文件


②将sed命令插入脚本文件后,然后通过sed命令调用它,格式为:

sed [选项] -f sed脚本文件 输入文件
③将sed命令插入脚本文件后,最常用的方法是设置该脚本文件为可执行,然后直接执行该脚本文件,格式为:
./sed 脚本文件 输入文件
第③种方式的sed脚本文件与第②种有所不同,其sed脚本文件需要以sha-bang(#!)符号开头,sha-bang后面是解析这个脚本的程序名。

sed的常用选项及其意义

选 项意 义示 例
-n不打印所有行到标准输出见 n.1 n.2 n.3
-e表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以省略[root@localhost ~]# sed -n -e '/Certificate/p' -e '/Certificate/=' input
-f表示正在调用sed脚本文件[root@localhost ~]# vim append.sed

#!/bin/sed -f
/file:/a\                      #a\表示在此处换行添加文本
We append a new line.\         #“\”符号表示换行
We append another line.
[root@localhost ~]# chmod u+x append.sed

[root@localhost ~]# ./append.sed input
sed命令通常由定位问本行和sed编辑命令两部分组成

sed命令定位文本的方法

选 项意 义示 例
xx为指定行号n.1 [root@localhost ~]# sed -n '1p' input
x,y指定从x到y的行号范围n.2 [root@localhost ~]# sed -n '3,6p' input
/pattern/查询包含模式的行n.3 [root@localhost ~]# sed -n '/certificate/p' input
/pattern/pattern/查询包含两个模式的行
/pattern/,x从与pattern的匹配行到x号行之间的行[root@localhost ~]# sed -n '/seugrid/,$p' input
x,/pattern/从x号行到与pattern的匹配行之间的行[root@localhost ~]# sed -n '3,/seugeid/p' input
x,y!查询不包括x和y行号的行[root@localhost ~]# sed -n '2,10!p' input
sed编辑命令

选 项意 义示 例
p打印匹配行[root@localhost ~]# sed -n '/Certificate/p' input
=打印文件行号[root@localhost ~]# sed -n '/Certificate/=' input
a\在定位行号之后追加文本信息[root@localhost ~]# sed '/file:/a\We append a new line.' input
i\在定位行号之前插入文本信息[root@localhost ~]# vim insert.sed
#!/bin/sed -f
/file:/i\
We insert a new line.
[root@localhost ~]# chmod u+x insert.sed

[root@localhost ~]# ./insert.sed input
d删除定位行[root@localhost ~]# sed '1d' input #删除第一行

[root@localhost ~]# sed '$d' input #删除最后一行

[root@localhost ~]# sed '1,10d' input #删除第1~10行

[root@localhost ~]# vim delete.sed
#!/bin/sed -f
/[Cc][Ee][Rr][Tt][Ii][Ff][Ii][Cc][Aa][Tt][Ee]/d
[root@localhost ~]# chmod u+x delete.sed

[root@localhost ~]# ./delete.sed input
c\用新文本替换定位文本[root@localhost ~]# vim modify.sed
#!/bin/sed -f
/file:/c\
We modify this line.
[root@localhost ~]# chmod u+x modify.sed

[root@localhost ~]# ./modify.sed input
s使用替换模式替换相应模式[root@localhost ~]# sed 's/Certificate/CERTIFICATE/' input

[root@localhost ~]# sed -n 's/Certificate/CERTIFICATE/p' input #-n和-p选项结合使用,只打印替换行

[root@localhost ~]# sed -n 's/Certificate/CERTIFICATE/' input #少了p选项,不打印任何内容

[root@localhost ~]# sed -n 's/seu/njue/p' input #不带g选项的结果

[root@localhost ~]# sed -n 's/seu/njue/' input #带g选项的结果

[root@localhost ~]# sed -n 's/seu/njue/2p' input #sed替换第n次匹配

[root@localhost ~]# sed -n 's/seu/njue/w outpout' input #将sed字符串改为njue,并将结果写入output文件

[root@localhost ~]# sed -n 's/seu/(&)/pg' input #&表示了seu
r从另一个文件中读文本[root@localhost ~]# vim otherfile
This is the first line of the otherfile.
This is the second line of the otherfile.
[root@localhost ~]# sed '/Certificate/r otherfile' input #在与Certificate匹配的行后读入otherfile文件
w将文本写入到一个文件[root@localhost ~]# sed -n '1,5 w output' input #将1~5行写入output文件

[root@localhost ~]# sed -n '/globus/w output' input #将与goobus关键字匹配的行写入output文件
y交换字符[root@localhost ~]# sed 'y/fmj/FMJ/' input
q第一个模式匹配完成后退出[root@localhost ~]# sed '5 q' input #打印前5行,然后退出

[root@localhost ~]# sed '/.r.*/q' input #匹配第1个字符串后立即退出
l显示与八进制ASCII码等价的控制字符[root@localhost ~]# sed -n '1,$l' control
{}在定位行执行的命令组[root@localhost ~]# sed -n '/Certificate/{p;=}' input #打印与Certificate匹配行的内容及行号

[root@localhost ~]# sed '/Certificate/{s/i/I/g;s/le/99/;}' input #在与certificate关键字匹配行将全部的i替换为I、将第1个le替换为99
n读取下一个输入行,用下一个命令处理新的行[root@localhost ~]# sed '/Certificate/{n;s/le/99/;}' input
h将模式缓冲区的文本复制到保持缓冲区[root@localhost ~]# sed '/Subject/h' input
H将模式缓冲区的文本追加到保持缓冲区[root@localhost ~]# sed '/seugrid/H' input
x互换模式缓冲区和保持缓冲区的内容[root@localhost ~]# sed '/seugrid/x' input
g将保持缓冲区的内容复制到模式缓冲区
G将保持缓冲区的内容追加到模式缓冲区[root@localhost ~]# sed '$G' input
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: