Shell指令碼學習筆記 七 sed和awk

2021-06-20 11:15:26 字數 2476 閱讀 4069

sed和awk 背景

正規表示式

正規表示式是組成「樣式」的基本語法,而「樣式」是運用sed和awk必備的能力。sed和awk相同的執行方式是:只要符合「樣式」的資料行,就對它執行指定的「操作」。

有關正規表示式的文章很多。可參見:

sed的用法

sed是一種非互動式的流編輯器,可動態編輯檔案。sed的工作模式是,比對每一資料行,若符合樣式,就執行指定的操作。

語法sed '樣式命令' 檔案

「樣式」使用一對//含括,表示尋找之意;也可以指定資料行的範圍。

sed並不會更改檔案內容。sed的工作方式是讀取檔案內容,經流編輯之後,把結果顯示到標準輸出。因此,如果想要儲存sed的處理結果,得自行運用轉向輸出將結果存成其他檔案。

各種用法

1 刪除某一段範圍的資料行:sed '1,4d' datafl  把第1到4行資料刪除,剩下的顯示出來。d表示刪除

2 把含有「樣式」的資料行刪除:sed '/la/d' datafl  把含有la的行刪除,剩下的顯示出來。//代表搜尋

sed '/[0-9]\/d' datafl  把含有3位數的行刪除,剩下的顯示出來。。      正規表示式的應用

3 不含有「樣式」的資料行刪除:sed '/la/!d' datafl   把不含有la的行刪除,剩下的顯示出來

4 含有「樣式」的資料行顯示出來:sed '/la/p' datafl  把含有la的行顯示出來。但sed預設也會把不符合的資料行顯示出來,所以應這樣用:sed -n '/la/p' datafl  -n會抑制sed顯示

5 取代:sed -n 's/la/oo/p' datafl s表示選取,第一對//中包括的字串是搜尋的目標,第二對//包括的是置換的字串。它會把資料行中的la換成oo    但這樣只會更換第乙個出現的la,若要全部置換,應使用:sed -n 's/la/oo/gp' dafl

6 取用符合樣式的字串:sed -n 's/\(la\)/\1oo/p' datafl  把找到的la存起來,用\1取回來再使用。執行的結果是,如資料行含有la,則第乙個出現的la會置換成laoo,然後顯示這些含有la的資料行

7 找到符合樣式的資料行後,再進行取代的操作:sed -n '/aaa/s/234/567/p' datafl 找到含aaa的那一行之後,將234換成567     sed -n '/aaa/,/ddd/s/b/567/p' datafl  將含有aaa到含有ddd的那幾行,皆將其中的b換成567 例子

#!/

bin/

bash

if[

$#-ne 1]

;then

echo

"usage: $0 on 或 $0 off

"exit1fi

opt=$

1case

"$opt"in

[oo][nn]

)cmd

='yes'

;;[oo][ff][ff]

)cmd

='no';;*

)echo

'選項錯誤:使用on或off'

exit1;;

esac

vsftp_conf='

/etc

/vsftpd

.conf'

tmp_file="

/tmp/tmp.$$"if

[ -e

$vsftp_conf ]

;then

sed s/^

.anonymous_enable=.*

/anonymous_enable

=$cmd/$

vsftp_conf

>

$tmp_file

mv -f

$tmp_file

$vsftp_conf

echo

'設定成功'

else

echo

"檔案:$vsftp_conf 不存在"fi

awk的用法

awk是一種可以處理資料,產生個時候報表的語言。工作方式是讀取資料檔案,將每一行資料視為一條記錄,每筆記錄以欄位分割符分成若干字段,然後輸出各個欄位的值。

ps auxw | awk ''

awk對每一條記錄都會套用乙個「樣式' 檔案 :對每一行都執行{}中的操作

awk '樣式' 檔案 :對符合樣式的資料行,執行{}中的操作

awk的用法:

1 awk '/la/' datafl 顯示含有la的資料行

2 awk '' datafl 顯示datafl每一行的第1和第2個字段

4 awk -f: '/^ols3/' /etc/passwd 使用選項-f 指定:為分隔符,帳號ols3的uid及gid欄位顯示出來

5 awk -f: 'begin/^ols3/' /etc/passwd 以:為分隔符,+++為輸出字段分隔符,將帳號ols3的第1-5欄位顯示     begin{}區域指定awk一開始先做初始化操作,設定ofs="+++"。變了ofs的作用是儲存輸出欄位的分隔符。

shell指令碼學習sed

i 替換並儲存 s pattern replace string 只替換第一處 s pattern replace string g 替換所有 s pattern replace string ng 從第n處開始匹配 ex 直接替換文字 clz localhost shell learn sed i...

Shell指令碼的學習 sed

sed是流編輯器,對文字進行批量化處理。sed option script file1 file2 sed option f scriptfile file1 file2 sed 處理的檔案既可以由標準輸入重定向得到,也可以當命令列引數傳入,命令列引數可以一次傳入多個檔案,sed會依次處理。sed的...

Shell指令碼學習之sed詳解

linux 1 目錄 sed編輯器逐行處理檔案 或輸入 並將結果傳送到螢幕。具體過程如下 首先sed把當前正在處理的行儲存在乙個臨時快取區中 也稱為模式空間 然後處理臨時緩衝區中的行,完成後把該行傳送到螢幕上。sed每處理完一行就將其從臨時緩衝區刪除,然後將下一行讀入,進行處理和顯示。處理完輸入檔案...