1):替换命令
g/addr/s/expr/replace/g[pWn]
gpWn
replace中的特殊字符
&
\
\n
[root@oracle ~]# sed -n 's/\t/>/2p' m
b >
[root@oracle ~]# sed -n 'l' m
a.$
b\t\t\t$
2):n命令
[root@oracle ~]# sed -n '2{
p --打印出第二行,即b
n --由于指定了-n,所以在n时没有打印b
p --当前行是第三行,即c
}' m
b
c
[root@oracle ~]# cat m
a.
b
c
d
ab
3):转换命令y
[root@oracle ~]# cat m
abcdefghijk
[root@oracle ~]# eval $(echo sed -n "'y/$(echo {a..z}|tr -d [[:blank:]])/$(echo {A..Z}|tr -d [[:blank:]])/;p'" m)
ABCDEFGHIJK
4):行号的打印
[root@oracle ~]# cat m
abcdefghijk
[root@oracle ~]# sed -n '1{
=
p
}' m
1
abcdefghijk
=就是一个打印行号的命令,在ed中也有。
5):读和写文件
r w
注意s命令的flag部分也有一个W命令,它只有在s命令成功后才写出。
[root@oracle ~]# cat a
a
[root@oracle ~]# cat b
b
[root@oracle ~]# sed '/a/w a
/b/w b
' m
注意:不可以写成下面这样的
[root@oracle ~]# fc
sed '/a/w a;/b/w b' m
sed: couldn't open file a;/b/w b: 没有那个文件或目录
r命令也一样
[root@oracle ~]# sed '/a/r a
> /b/r b' m
a
a
b
b
6):退出命令q
[root@oracle ~]# cat m
a
b
[root@oracle ~]# sed '1q' m
a
sed命令高级篇
1):n和N命令
[root@oracle ~]# sed -n '$!n;p' m
b
c
[root@oracle ~]# sed -n 'N;p' m
a
b
[root@oracle ~]# sed -n '$!N;p' m
a
b
c
[root@oracle ~]# cat m
a
b
c
2):多行删除--D命令的特殊性
D只删除模式空间中的第一行,且返回脚本的头部重新运用命令行。
[root@oracle ~]# cat m
1,abcdefg
2,abcdefg
3,abcdefg
4,abcdefg
[root@oracle ~]# sed -n 'n;s/a/m/gp;D' m
2,mbcdefg
4,mbcdefg
3):多行打印P
它只打印多行模式空间中的第一行。
[root@oracle ~]# sed -n 'N;P' m
1,abcdefg
3,abcdefg
4):三个命令的综合应用--构造输入循环
[root@oracle ~]# cat m
Hello
World Hello
World
[root@oracle ~]# sed -n 'N;s/Hello\nWorld/Hello\
> Kitty/p' m
Hello
Kitty Hello
上面没有成功的,你可以思考下使用N,P,D三个命令来组合实现。
5):保持空间
x h,H g,G
x是交互保持空间与模式空间内容,h是把模式空间内容复制到模式空间,H是append。
6):高级的流控制语句
b和t
[root@oracle ~]# sed -n 'b label;s/a/m/gp;:label' m
[root@oracle ~]# cat m
abcde
fghij
t命令,如果成功替换了t就生效
[root@oracle ~]# sed -n 's/a/m/gp
> t
> s/b/o/gp
> ' m
mbcde
[root@oracle ~]# fc
sed -n 's/a/m/gp
s/b/o/gp
' m
mbcde
mocde
阅读(1065) | 评论(0) | 转发(0) |