一、SED介绍(Stream EDitor)

        SED是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要简单一些,awk的功能复杂,对列处理的功能比较强大。

        Linux sed命令是利用script 来处理文本文件。

        sed可依照script的指令,来处理、编辑文本文件。

        sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

二、语法

        sed  [-hnV][-e<script>][-f<script>][文本文件]

     1、参数说明:

        -e<script>或 --expression=<script>  以选项中指定的script来处理输入的文本文件。

        -f<script> 或 --file=<script文件> 以选项中指定的script来处理输入的文本文件。

        -h或--help 显示帮助

        -n或--quiet 或 --silent  仅显示scirpt处理后的结果

        -V 或 --version :显示版本信息。

        -r :表示使用扩展正则表达式。

    2、动作说明:

        a:新增,a的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)  a\string:在指定的行后面追加新行,内容为string

            Linux初级运维(八)——sed命令的使用及for循环_sed命令

        c:取代,c的后面可以接字串,这些字串可以取代n1,n2之间的行。

        d:删除,因为是删除,所以d后面通常不接任何字串

        i:插入,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)   i\string:在指定的行后面追加新行,内容为string

        p:打印,将某个选择的数据打印。通常p会与参数sed -n 一起运行。

        s:取代,可以直接进行取代的工作。通常s的动作可以搭配正则表达式。

                加修饰符

                q:全局替换

                i:忽略字符大小写

        r FILE:将指定的文件的内容添加至符合条件的行处

        w FILE :将指定范围内的内容另存至指定的文件中。


        sed 'AddressCommand' file ...

        Address:

            1、StartLine,EndLine

                    比如 1,100

                    $:表示最后一行

            2、/RegExp/

                /^root/

            3、/pattern1/,/pattern2/

                第一次被pattern1匹配到的行开始,至第一次被pattern2 匹配到的行结束,这中间所有的行。

            4、LineNumber

                指定的行

            5、StartLine,+N

                从StartLine开始,向后的N行;

        Command:

            -d : 删除某行

        Linux初级运维(八)——sed命令的使用及for循环_sed命令_02

            Linux初级运维(八)——sed命令的使用及for循环_sed命令_03

三、练习题

    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'

        

四、字符串测试

        ==:测试是否相等,相等为真,不等为假

        !=:测试是否不等,不等为真,相等为假

        > :测试是否大于,大于为真,不大于为假

        <:测试是否小于,小于为真,不小于为假

        -n string :测试指定字符串是否为空,空则为真,不空则为假。

        -s string:测试指定字符串是否不为空,不空则为真,空则为假


    1、练习题

        传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将结果显示出来。

        Linux初级运维(八)——sed命令的使用及for循环_sed命令_04

    2、写一个脚本

        传递一个参数(单个字符)给脚本,如果参数为q,Q、quit或Quit,就退出脚本;否则,就显示用户的参数。

        Linux初级运维(八)——sed命令的使用及for循环_for循环_05


五、for循环

        对于循环,需要进入条件,退出条件。

        常见的循环方法:for  、 while  、 until

        for 变量 in 列表 ;do

            循环体

        done


        for i  in 1 2 3 4 5 6  7 8 9 10 ;do

            加法运算

        done


        遍历完成之后,退出;


        如何生成列表:

        (1)    {1..100}

        (2)   'seq [起始数  步进长度    结束数'

       算从1加到100的和

        Linux初级运维(八)——sed命令的使用及for循环_sed命令_06

        Linux初级运维(八)——sed命令的使用及for循环_sed命令_07

六、练习题

        Linux初级运维(八)——sed命令的使用及for循环_sed命令_08