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 例子
#!/awk的用法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是一種可以處理資料,產生個時候報表的語言。工作方式是讀取資料檔案,將每一行資料視為一條記錄,每筆記錄以欄位分割符分成若干字段,然後輸出各個欄位的值。
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每處理完一行就將其從臨時緩衝區刪除,然後將下一行讀入,進行處理和顯示。處理完輸入檔案...