shell编程——sed用法

一、sed格式:

sed 参数 '正则表达式' 文件名

演示文件的内容:

[root@localhost ~]# cat test.sh 
#!/bin/bash
第一行 12345!
第二行 23456@
第三行 34567#
第四行 45678$
第五行 56789%

sed默认是打印出文件内容的,不加正则表达式时会把文件内容全部打印出来,跟cat功能类似:

[root@localhost ~]# sed '' test.sh
#!/bin/bash
第一行 12345!
第二行 23456@
第三行 34567#
第四行 45678$
第五行 56789%

我们加-n参数取消sed的默认打印功能,在正则表达式中加p表示打印匹配表达式的内容,这里为空表示匹配所有,结果会把整个文件打印出来:

[root@localhost ~]# sed -n '' test.sh 
[root@localhost ~]# sed -n 'p' test.sh
#!/bin/bash
第一行 12345!
第二行 23456@
第三行 34567#
第四行 45678$
第五行 56789%

现在我们打印第一行:

[root@localhost ~]# sed -n '1p' test.sh
#!/bin/bash

从第二行开始打印到四行,#!/bin/bash也算是一行

[root@localhost ~]# sed -n '2,4p' test.sh
第一行 12345!
第二行 23456@
第三行 34567#

把包含234的打印出来:

[root@localhost ~]# sed -n '/234/p' test.sh 
第一行 12345!
第二行 23456@

当匹配内容里有特殊字符时需要加\屏蔽其特殊含义

[root@localhost ~]# sed -n '/\$/p' test.sh 
第四行 45678$

注意:当匹配不到时会把整个文件打印出来

[root@localhost ~]# sed -n '/$/p' test.sh 
#!/bin/bash
第一行 12345!
第二行 23456@
第三行 34567#
第四行 45678$
第五行 56789%

在第三行里查询包含字符“二”的内容,可用来判断该行是否存在该字符串

[root@localhost ~]# sed -n '/二/,3p'  test.sh 
第二行 23456@

把除了第一、二行外的其他内容打印出来:

[root@localhost ~]# sed -n '1,2!p' test.sh 
第二行 23456@
第三行 34567#
第四行 45678$
第五行 56789%

经测试一个正则表达式中最多只能排除两行,三行就无效:

[root@localhost ~]# sed -n '1,2,4!p' test.sh 
sed:-e 表达式 #1,字符 4:未知的命令:“,”

二、现在介绍下在正则表达式中常用的编辑命令:

p 打印匹配行

= 显示文件行号

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

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

d 删除定位行

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

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

r 从另一个文件中读文本

w 写文本到一个文件

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

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

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

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

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

y 传送字符

n 延续到下一输入行;允许跨行的模式匹配语句
posted @ 2015-05-14 16:24  Jim.Deng  阅读(450)  评论(0编辑  收藏  举报