Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78918
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 434
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-23 09:31
个人简介

天行健,君子以自强不息;地势坤,君子以厚德载物

文章分类
文章存档

2018年(11)

2017年(30)

我的朋友

分类: LINUX

2017-04-23 11:54:43

sed命令:流编辑器
    1、sed基本用法:
        sed:Stream EDitor
            行编辑器(全屏编辑器:vi)
            
    2、sed:模式空间(默认不编辑原文件,仅对模式空间中的数据做处理,处理结束后,将模式空间打印至屏幕)
    3、sed  [options] 'AddressCommand' file.....
        -n:静默模式,不再默认显示模式空间中的内容
            例如:[root@Ourlab ~]# sed -n '/^L/p' /etc/fstab
                    LABEL=/                 /                       ext3    defaults        1 1
                    LABEL=/home             /home                   ext3    defaults        1 2
                    LABEL=/boot             /boot                   ext3    defaults        1 2
                    LABEL=SWAP-sda5         swap                    swap    defaults        0 0
        -i:直接修改原文件
        -e script -e script:可以同时执行多个脚本
        -f /path/to/sed_script:把脚本中保存的命令应用于指定的文件中
            用法:sed -f /path/to/scripts file
        -r:表示使用扩展正则表达式
        
        Address:
            1、StartLine,EndLine
                比如:1,100
                $:最后一行
                    例如:[root@Ourlab ~]# sed '3,$d' /etc/fstab
                
            2、/RegExp/
                比如:/^root/
                    例如:[root@Ourlab ~]# sed '/oot/d' /etc/fstab
            3、/Pattern1/,/pattern2/:第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行
            4、LineNumber:指定的行
            5、StartLine, +N:从startline开始,向后的n行;
                例如:[root@Ourlab ~]# sed '1,+2d' /etc/fstab
            
        Command:
            d:删除符合条件的行
                例:[root@Ourlab ~]# sed '1,2d' /etc/fstab
            p:显示符合条件的行
                例如:[root@Ourlab ~]# sed -n '/^L/p' /etc/fstab
                        LABEL=/                 /                       ext3    defaults        1 1
                        LABEL=/home             /home                   ext3    defaults        1 2
                        LABEL=/boot             /boot                   ext3    defaults        1 2
                        LABEL=SWAP-sda5         swap                    swap    defaults        0 0
            a \string:在指定的行后面追加新行,内容为string
                例如:[root@Ourlab ~]# sed '/^L/a \#hello world' /etc/fstab
                        LABEL=/                 /                       ext3    defaults        1 1
                        #hello world
                \n:可以用于换行
            i \string:在指定的行前面添加新行,内容为string
            r filename:将指定的文件的内容添加至指定的行处
                例如:[root@Ourlab ~]# sed '2r /etc/issue' /etc/fstab
                        LABEL=/                 /                       ext3    defaults        1 1
                        LABEL=/home             /home                   ext3    defaults        1 2
                        Red Hat Enterprise Linux Server release 5.8 (Tikanga)
                        Kernel \r on an \m
            w filename:将指定范围内的内容另存至指定的文件中;
                例如:[root@Ourlab ~]# sed '/oot/w /tmp/oot.txt' /etc/fstab
                        [root@Ourlab ~]# cat /tmp/oot.txt
                        LABEL=/boot             /boot                   ext3    defaults        1 2
            s/pattern/string/修饰符:查找并替换,默认只替换每行中第一次被匹配到的符串
                例如:[root@Ourlab ~]# sed 's/oot/OOT/' /etc/fstab
                        LABEL=/bOOT             /boot                   ext3    defaults        1 2
                加修饰符:
                    g:全局替换
                        例如:[root@Ourlab ~]# sed 's/oot/OOT/g' /etc/fstab
                            LABEL=/bOOT             /bOOT                   ext3    defaults        1 2
                    i:忽略字符大小写
            s///(s###,s@@@):分隔符不局限于‘/’,只要保证三个一致,可替换成其他符号;
                例如:[root@Ourlab ~]# sed 's#oot#OOT#g' /etc/fstab
                &:引用模式匹配整个串
                    任务1:like替换为liker,love替换为lover
                        例如:例如:[root@Ourlab ~]# sed 's#l..e#&r#g' sed.txt
                                    hello,liker
                                    hi,my lover
                后向引用:\(\),\1,\2    
                    任务2:like替换为Like,love替换为Love
                        例如:[root@Ourlab ~]# sed 's#l\(..e\)#L\1#g' sed.txt
                                hello,Like
                                hi,my Love
课后练习:
1、删除/etc/grub.conf文件中行首的空白符;
[root@Ourlab ~]# sed 's/[[:space:]]//g' /etc/grub.conf

2、替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5;
[root@Ourlab ~]# sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab

3、删除/etc/inittab文件中的空白行;
[root@Ourlab ~]# sed '/^$/d' /etc/inittab

4、删除/etc/inittab文件中开头的#号;
[root@Ourlab ~]# sed 's/^#//g' /etc/inittab

5、删除/etc/inittab文件中开头的#号,但要求#号后面必须有空白字符;
[root@Ourlab ~]# sed -r 's/^#[[:space:]]+//g' /etc/inittab

6、删除某文件中以空白符后面跟#类的行中的开头的空白字符及#;
[root@Ourlab ~]# sed -r 's/^[[:space:]]+#//g' ./testsed.txt

7、取出/etc/rc.d/abc/cef/文件路径的目录名称;
[root@Ourlab ~]# echo "/etc/rc.d/abc/cef/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
阅读(865) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~