Sed命令

  1.简介

       模式空间,sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。

  2.格式规范:
       sed [options] 'AddressCommand' file ...
    解析: 
     2.1 options(选项):

 选项  功能
 -e  进行多项编辑,即对输入行应用多条sed命令时使用
 -n  取消默认的输出
 -f  指定sed脚本的文件名
   
    2.2Address:
      1、StartLine,EndLine
      如:删除第3行到最后一行  
           [root@tang ~]# sed "1,$d" /etc/fstab
       
      2.、/RegExp/ -->/^root/
      如:包含oot就删除 
           [root@tang ~]# sed '/oot/d' /etc/fstab
      
      3、/pattern1/,/pattern2/
           第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行
     
      4、LineNumber
          指定的行

       5、StartLine, +N
           从startLine开始,向后的N行;
          [root@tang ~]# sed "1,+2d" /etc/fstab

     2.3 Command:    
 命令  功能
 a\

 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行

 c\  用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行
 i\  在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行
 d  删除行
 h  把模式空间里的内容复制到暂存缓冲区
 H  把模式空间里的内容追加到暂存缓冲区
 g  把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
 G  把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
 l  列出非打印字符
 p  打印行
 n  读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
 q  结束或退出sed
 r  从文件中读取输入行
 !  对所选行以外的所有行应用命令
 s  用一个字符串替换另一个
 g  在行内进行全局替换
   
 w  将所选的行写入文件
 x  交换暂存缓冲区与模式空间的内容
 y  将字符替换为另一字符(不能对正则表达式使用y命令)

        d: 删除符合条件的行;sed '1,2d' /etc/xx ;
p: 显示符合条件的行;
a \"string": 在指定的行后面追加新行,内容为string
\n:可以用于换行
>:sed '/^\//a \# hello word' /fstab2 
i \string: 在指定的行前面添加新行,内容为string
r FILE: 将指定的文件的内容添加至符合条件的行处
>:sed '1r etc/issue' /etc/fstab 
w FILE: 将地址指定的范围内的行另存至指定的文件中;
>:sed '/oot/w /tmpoot.txt' /etc/fstab 
s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
 >: sed 's/^\//#/'  /fstab2      (第一行为'/' 替换成'#')
加修饰符
g: 全局替换
i: 忽略字符大小写
s///: s###, s@@@
   或 sed 's@/@#@g'  /fstab2   
\(\), \1, \2

l..e: like-->liker
 love-->lover
 >:sed 's#1..e#&r#g' sed.txt 或 sed 's#\(1..e\)#\1r#g' sed.txt 
 like-->Like
 love-->Love
    >:sed 's#l\(..e\)#L#g' sed.txt 
&: 引用模式匹配整个串

       

3.sed练习:

1、删除/etc/grub.conf文件中行首的空白符;

sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf

2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;

sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab

3、删除/etc/inittab文件中的空白行;

sed '/^$/d' /etc/inittab

4、删除/etc/inittab文件中开头的#号; 

sed 's@^#@@g' /etc/inittab

5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;

sed -r 's@^#[[:space:]]+@@g' /etc/inittab

6、删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#

sed -r 's@^[[:space:]]+#@@g' /etc/inittab

7、取出一个文件路径的目录名称;

echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'

基名:

echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g'


      


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值