sed 命令的使用

sed是一个“非交互式的”面向字符流的编辑器。能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件输入到屏幕,可以把只匹配到模式的内容输入到屏幕上。还可以对原文件改动,但是不会再屏幕上返回结果。

命令格式:

# sed  [options]  ‘sed command’ filename(s)

# sed  [options]  -f  ‘sed scriptfile’   filename(s)

参数:文件指定待处理的文本文件列表。

sed命令的选项(option):

-n :只打印模式匹配的行

-e :直接在命令行模式上进行sed动作编辑,此为默认选项

-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作

-r :支持扩展表达式

-i :直接修改文件内容

 

命令:

Sed各种事例:

测试文件为:

# vi /root/qq.txt

my cat's name is betty

This is your dog

my dog's name is frank

This is your fish

my fish's name is george

This is your goat

my goat's name is adam

事例1:

S命令:替换指定字符

# sed 's/This/aaa/' qq.txt

事例2:

-n选项和p命令一起使用表示只打印那些发生替换的行:

# sed -n 's/This/aaa/p' qq.txt

事例3:

直接编辑文件选项-i,会匹配qq.txt文件中每一行的第一个This替换为this:

#  sed -i 's/This/this/' qq.txt

事例4:

打印文件中的第二行,第二行会打印两遍,sed默认会打印所有行。

事例5:

使用-n选项表示只打印匹配的行:

事例6:

打印文件的第一到第三行。

事例7:

表示打印文件中匹配dog字符的行。

事例8:

打印文件中从匹配adam的行到第四行,adam所处的行如果在第四行之后,则表示仅打印匹配adam的行。如果adam正好在第四行,则只打印这一行。

事例9:

打印从第一行开始匹配到第一次出现dog字符的行,dog字符行也打印。

事例10:

打印文件中第一行到第四行的内容,且打印行号,当用到sed不同的编辑命令时,用{},且不同编辑命令之间用分号隔开。

事例11:

用!表示对前面的匹配的模式取反。

事例12:

#######sed的匹配模式支持正则表达式#####################  

sed'5 q'/etc/passwd#打印前5行  

sed-n '/r*t/p'/etc/passwd#打印匹配r有0个或者多个,后接一个t字符的行  

sed-n '/.r.*/p'/etc/passwd#打印匹配有r的行并且r后面跟任意字符  

sed-n '/o*/p'/etc/passwd#打印o字符重复任意次  

sed-n '/o\{1,\}/p'/etc/passwd#打印o字重复出现一次以上  

sed-n '/o\{1,3\}/p'/etc/passwd#打印o字重复出现一次到三次之间以上  

 

事例13:

打印出以#开头的行,然后用!进行反选,则表示过滤掉以#开头的行,不会过滤掉空格。

# sed -n '/^#/!p'  /etc/vsftpd/vsftpd.conf         

事例14:

匹配以#开头的行,进行反取,则打印出非#开头的行,然后其结果在对空格开头的去反,表示过滤掉以#和空格开头的行。

# sed -n '/^#/!{/^$/!p}'  /etc/vsftpd/vsftpd.conf  

事例15:

# sed -e '/^#/d' -e '/^$/d'  /etc/vsftpd/vsftpd.conf  

事例16:

打印第一行到匹配adm的行,adm在第四行。

# sed -n '1,/adm/p' /etc/passwd  

事例16:

打印匹配adm的行到第六行

# sed -n '/adm/,6p' /etc/passwd  

请你操作打印后说出下面两行都代表了什么?

# sed -n '/adm/,4p' /etc/passwd  

# sed -n '/adm/,2p' /etc/passwd  

Sed命令对文件内容的添加,对源文件的话就用-i参数。

事例17:

匹配dog字符的行,行首添加nihao这个字符。

事例18:

匹配adam字符,在这个字符前面添加qq。

事例19:

匹配adam字符,在这个字符后面添加qq。

事例20:

Sed的删除操作是针对文件的行,如果想删除行中的某个字符,可以使用替换。

 

 

Sed的替换操作:

#================源文件里面的内容===============================  

# cat test  

  anonymous_enable=YES  

  write_enable=YES  

  local_umask=022  

  xferlog_enable=YES  

  connect_from_port_20=YES  

  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  

  DEVICE="eth0"  

  BOOTPROTO="static"  

  HWADDR="00:0C:29:90:79:78"  

  ONBOOT="yes"  

  IPADDR=172.16.22.1  

  NETMASK=255.255.0.0  

  #================================================================

# sed -i '/DEVICE/c\Ethernet' test   

          #匹配DEVICE的行,替换成Ethernet这行  

# sed -i 's/static/dhcp/' test       

          #static替换成dhcp(/,@,#都是前面所说的地址定界符)  

# sed -i '/IPADDR/s@22\.1@10.12@' test  

          #匹配IPADDR的行,把22.1替换成10.12由于.号有特殊意义所有需要转义  

# sed -i '/connect/s#YES#NO#' test   

          #匹配connect的行,把YES替换成NO  

# sed -i 's/bin/tom/2g' test         

          #把所有匹配到bin的行中第二次及第二次之后出现bin替换成tom  

# sed -i 's/daemon/jerry/2p' test    

          #把所有匹配到bin的行中第二次出现的daemon替换成jerry,并在生产与匹配行同样的行  

# sed -i 's/adm/boss/2' test         

          #把所有匹配到adm的行中仅仅只是第二次出现的adm替换成boss  

# sed -i '/root/{s/bash/nologin/;s/0/1/g}' test  

          #匹配root的行,把bash替换成nologin,且把0替换成1  

# sed -i 's/root/(&)/g' test                   

          #把root用括号括起来,&表示引用前面匹配的字符  

# sed -i 's/BOOTPROTO/#BOOTPROTO/' test        

          #匹配BOOTPROTO替换成#BOOTPROTO,在配置文件中一般用于注释某行  

# sed -i 's/ONBOOT/#&/' test                   

          #匹配ONBOOT的行的前面添加#号,在配置文件中也表示注释某行  

# sed -i '/ONBOOT/s/#//' test                  

          #匹配ONBOOT的行,把#替换成空,即去掉#号,也一般用作去掉#注释  

#============执行以上sed命令之后文件显示的内容====================  

# cat test  

  anonymous_enable=YES  

  write_enable=YES  

  local_umask=022  

  xferlog_enable=YES  

  connect_from_port_20=NO  

  (root):x:1:1:(root):/(root):/bin/nologin  

  bin:x:1:1:tom:/tom:/stom/nologin  

  daemon:x:2:2:jerry:/sbin:/stom/nologin  

  daemon:x:2:2:jerry:/sbin:/stom/nologin  

  adm:x:3:4:boss:/var/adm:/sbin/nologin  

  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin  

  Ethernet  

  #BOOTPROTO="dhcp"  

  HWADDR="00:0C:29:90:79:78"  

  ONBOOT="yes"  

  IPADDR=172.16.10.12  

  NETMASK=255.255.0.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值