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 #将最后一行的','替换修改成'!'

 

 

posted @ 2016-12-06 22:41  wclwcw  阅读(571)  评论(0编辑  收藏  举报