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 延续到下一输入行;允许跨行的模式匹配语句
博客同步地址:http://blog.csdn.net/u010917843