sed基本用法

1、什麼是sed

    sed = Stream EDitor    行編輯器 (全屏編輯器: vi)


2、模式空間

    sed默認不對源文件的數據進行處理,而是處理模式空間中的數據,處理結束後,在將模式空間顯示到屏幕上。


3、sed命令的用法:

    sed [options] 'AddressCommond' file1,file2......

        -n :靜默模式,不再顯示模式空間中的內容

        -e Script -e Script : 可以同時執行多個腳本

        -i :直接修改原文件中的內容

        -r :表示使用擴展的正則表達式

        -f /path/to/script file

   


4、address:

    1、startLine,EndLine

        eg:1,100

        $表示最後一行

    2、/RegExp/

        eg:/root/


    3、/pattern1/,/pattern2/

        從第一次被pattern1匹配到的行開始,到第一次被pattern2匹配到的行結束,這中間的所有行

    

    4、LineNumber

        指定的行

    

    5、StartLine,+N

        從指定的行開始,向後的N行,包括StartLine


5、Commond:

            d:刪除符合條件的行

            p:顯示符合條件的行

            a \string:在指定行的行尾追加新行,添加的內容爲string

            i \string:在指定行的行首添加新行,添加的內容爲string

            r FILE:將指定文件的內容添加到符合條件的行處

            w FILE: 將地址指定的範圍內的行另存至指定的文件中; 

    s/pattern/string/修飾符: 查找並替換,默認只替換每行中第一次被模式匹配到的字符串

加修飾符

g: 全局替換

i: 忽略字符大小寫

    s///: s###, s@@@

\(\), \1, \2

    l..e: like-->liker

 love-->lover

 

 like-->Like

 love-->Love

&: 引用模式匹配整個串

            

 

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'


#abc

# hello world

   # hi world

練習:

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

if ! id $1 &> /dev/null;then

    echo "No Such User"

    exit 10

fi


if [ `id -u -n $1` == `id -g -n $1`];then

    echo "Yi Yang"

else

    echo "Bu Yi Yang"

fi

     


字符測試:

==:測試是否相等,相等爲真,不等爲假

!=: 測試是否不等,不等爲真,等爲假

>

<

-n string: 測試指定字符串是否爲空,空則真,不空則假

-z string: 測試指定字符串是否不空,不空爲真,空則爲假


練習:寫一個腳本

傳遞一個參數(單字符就行)給腳本,如參數爲q,就退出腳本;否則,就顯示用戶的參數;


練習:寫一個腳本

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

#!/bin/bash

#

if [ $1 = 'q' ];then

  echo "Quiting..."

  exit 1

elif [ $1 = 'Q' ];then

  echo "Quiting..."

  exit 2  

elif [ $1 = 'quit' ];then

  echo "Quiting..."

  exit 3 

elif [ $1 = 'Quit' ];then

  echo "Quiting..."

  exit 4  

else

  echo $1

fi



練習:

傳遞三個參數給腳本,第一個爲整數,第二個爲算術運算符,第三個爲整數,將計算結果顯示出來,要求保留兩位精度。形如:

./calc.sh 5 / 2


#!/bin/bash

RESULT=`bc <<< "scale=2;$1$2$3"`

echo RESULT


練習:

傳遞3個參數給腳本,參數均爲用戶名。將此些用戶的帳號信息提取出來後放置於/tmp/testusers.txt文件中,並要求每一行行首有行號。


寫一個腳本:

判斷當前主機的CPU生產商,其信息在/proc/cpuinfo文件中vendor id一行中。

如果其生產商爲AuthenticAMD,就顯示其爲AMD公司;

如果其生產商爲GenuineIntel,就顯示其爲Intel公司;

否則,就說其爲非主流公司;



寫一個腳本:

給腳本傳遞三個整數,判斷其中的最大數和最小數,並顯示出來。

MAX=0

MAX -eq $1

MAX=$1

MAX -lt $2

MAX=$2

   

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