Linux初級運維(八)——sed命令的使用及for循環

一、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

            image.png

        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 : 刪除某行

        image.png

            image.png

三、練習題

    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、練習題

        傳遞一個用戶名參數給腳本,判斷此用戶的用戶名跟其基本組的組名是否一致,並將結果顯示出來。

        image.png

    2、寫一個腳本

        傳遞一個參數(單個字符)給腳本,如果參數爲q,Q、quit或Quit,就退出腳本;否則,就顯示用戶的參數。

        image.png


五、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的和

        image.png

        image.png

六、練習題

        image.png

    

        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章