sed用法
sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝,标准输入可能是来自键盘、文件重定向、字符串或变量。或者是一个管道文本,sed可以做哪些工作呢?
sed命令用来编辑
sed命令用来删除
sed命令允许工作不在现场,一次性处理所有改变,节省用户时间
sed在文件中定位文本的方式
x 为一行号,如1
x,y 表示行号范围,如2,5,表示从第二行到第五行
/pattern/pattern/ 查询包含两个模式的行,如/wang/wangs/
pattern/,x 在指定行查询匹配模式,如wang/,3
x,y! 查询不包含指定行号x和y。1.2!
基本编辑命令
p 打印匹配行
= 显示匹配文件行号
a\ 在定位行号后面附加新文本信息
i\ 在定位行号后面插入新文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应的模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制ASCII代码等价的控制符
{} 在定位行执行命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输出行,允许跨行模式的匹配语句
特殊注意
sed如果需要定位匹配特殊字符,在字符前面一定要添加字符\,屏蔽该特殊字符的特殊含义
示例:
显示/etc/passwd文件的第2行
[root@template ~]# sed -n '2'p /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
显示/etc/passwd文件的1到5行
[root@template ~]# sed -n '1,5'p /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
匹配特定字符zabbix
[root@template ~]# sed -n '/zabbix/'p /etc/passwd
zabbix:x:498:498:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
匹配指定行特定字符zabbix
[root@template ~]# sed -n '30,/zabbix/'p /etc/passwd
zabbix:x:498:498:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
匹配元字符
[root@template ~]# sed -n '/\$/'p quote.txt
$$dsf
显示所有文件内容
[root@template ~]# sed -n '1,$'p quote.txt
1233
wqw
qdfsf
dfsdf
sdfg
dssg
dgsdx
sfsdf
$$dsf
sdsdf
ds
fs
sdf
匹配任意字符s使用.*号码匹配,下面示例位匹配包含sdf字符串
[root@template ~]# sed -n '/.*sdf/'p quote.txt
dfsdf
sdfg
sfsdf
sdsdf
sdf
匹配首行
sed -n ’1'p /etc/passwd
匹配末尾号
sed -n '$'p /etc/passwd
打印匹配模式行号使用=
[root@template ~]# sed -e '/sdsdf/=' quote.txt
1233
wqw
qdfsf
dfsdf
sdfg
dssg
dgsdx
sfsdf
$$dsf
10
sdsdf
ds
fs
sdf
只显示匹配模式的行和行号
[root@template ~]# sed -ne '/sdsdf/'p -e /'sdsdf/=' quote.txt
sdsdf
10
数据的搜寻并替换
sed 's/要被取代的字串/新的字串/g'
sed 's/wang/zhou/g'
删除文本
sed 'n,m'd test.txt #n,m为数字
删除具体某一行 sed 'n'd test.txt #n为数字
模式匹配的行被删除 sed '/pattern/'d test.txt
直接修改文件内容
1、sed -i 's/要被取代的字串/新的字串/g' test.txt
2、sed -i '$a #you are a handsome boy' test.txt #在最后一行插入you are a handsome boy
3、sed -i 's/\$./\!/g' test.txt #将最后一行的','替换修改成'!'