4第四章:shell程式設計之sed與awk
正規表示式分為:
基礎正規表示式
擴充套件正規表示式
基礎正規表示式:
常見的轉義字元
用法:例:echo -e 「abc\nbcd」
擴充套件正規表示式:
預設可以直接使用擴充套件正規表示式的命令:
awk如果需要sed和grep使用擴充套件正規表示式,則需要加額外選項:
sed -r
grep -e 或者egrep
示例:sed命令:
格式:sed [選項] 『(模式)(動作)』檔名
sed的程式構成:
模式空間:用於載入每一行資料,並且執行處理命令的記憶體空間
保持空間:只能用來存放資料,不能用於資料的處理的記憶體空間
注:保持空間中的資料可以和模式空間的資料相互交換
sed常用動作:
p:列印
d:刪除
s:替換
c:替換整行
r:讀取其他檔案中的資料內容到相應的行後
a:追加到指定行後
i:插入到指定行前
n:表示讀取下一行內容
h:將模式空間中的內容複製到保持空間(覆蓋)
h:將模式空間中的內容複製到保持空間(追加)
g:將保持空間的內容複製到模式空間(覆蓋)
g:將保持空間的內容複製到模式空間(追加)
=:列印行號
{}:將大括號中的動作看做是乙個整體,對前面的匹配模式執行
示例:awk命令:
檢視作業系統的系統版本:
cat /etc/redhat-release
或:cat /etc/centos-release
檢視作業系統的核心版本
uname -r
awk書寫的標準模式:
awk 【選項】 『模式 』 檔名
常用選項:
-f:指定列分隔符
–posix:可以使用{}的方式表示匹配次數
awk使用注意事項:
對於行的控制取決於模式
對於列的控制取決於動作
常見的預定義變數:
nr:行數
nf:列數
rs:記錄分隔符
示例:fs:字段分隔符
ors:輸出記錄分隔符
ofs:輸出字段分隔符
rs與ors的配合使用原理:
當awk命令在處理文字時,一讀到rs變數所指定的符號時,就會去執行ors所指定的符號
例:rs=「 」 //rs變數定義為空格
ors=「.」 //ors變數指定為冒號
則一旦awk在讀到空格的時候,就會在螢幕上列印乙個冒號
fs與ofs的配合使用原理:
當awk命令在處理文字時,一讀到fs變數所指定的符號時,就會記錄為乙個字段,當用print命令列印列的時候,如果碰到了,(逗號),在列印時,逗號會被轉換成ofs變數所定義的內容
例子:fs=「 」 //fs變數定義為空格
ofs=「.」 //ofs變數指定為冒號
awk 『begin(fs=」 」;ofs=」:」) 』 2.txt
輸出效果:
$1:$2:$3 //$1,$2,$3代表相應的內容,用ofs變數指定的冒號分隔
awk常用的組合命令:
sort:排序
常用選項:
-n:以數字大小排序
-r:降序排列(預設公升序)
uniq:去重
常用選項:
-c:去重的同時顯示重複的個數
補充命令:
tr:替換命令
格式:tr 「」 「」
awk命令完整格式:awk [選項] 『begin{} 【模式】 end{}』 檔名
begin模組的使用:(文字內容處理之前執行begin模組)
1、定義awk中將會使用到的變數
2、可以當做計算器使用
3、可以直接列印一些你想要的字元
注意:begin模組中的所有設定都算是動作的一種,比如變數的賦值,字串的列印都屬於動作,每個動作和動作紙質件用分號(;)分隔
注意:在awk命令中,所欲的字母或字母組成的單詞,直接使用他們時,都將會以呼叫變數的形式來處理(awk預設認為字母就是變數),如果需要列印普通的英文本元,則需要用雙引號(」」)括起來,單引號不行
end模組的使用:(在文字內容處理完成後執行end模組中的命令)
1、可以直接列印一些字串
2、可以統計文字的處理結果(需要配合遞增操作)
知識補充:
動作中可以使用整數函式進行整數計算:int()
awk中的流程控制語句:
流程控制語句在awk中均屬於動作,可以寫在begin模組,動作模組,end模組
for迴圈語句格式:
for(迴圈條件)
舉例:for(i=1;i<=10;i++)
if判斷語句格式:
if(條件)
舉例:if(nr>=2)
while迴圈語句格式:
while(迴圈條件)
舉例:while(i<=10)
awk陣列:
格式:陣列名[元素名]=值
應用:排序去重,統計數量(需要配合迴圈語句完成)
文件案例解析:
h[$2]=h[$2]+1
讀入第一行時:執行以下動作
h[www.etiantian.org]=h[www.etiantian.org]+1
讀完第一行後,陣列的值為:
h[www.etiantian.org]=1
讀入第二行時:執行以下動作
h[www.etiantian.org]=h[www.etiantian.org]+1
結果:h[www.etiantian.org]=2
讀入第三行時:執行以下動作
h[post.etiantian.org]=h[post.etiantian.org]+1
結果:h[post.etiantian.org]=1
讀入第四行時:執行以下動作
h[***.etiantian.org]=h[***.etiantian.org]+1
結果:h[***.etiantian.org]=1
最終結果:
h[www.etiantian.org]=3
h[post.etiantian.org]=2
h[***.etiantian.org]=1
第四章 程式設計
選擇語言的原則 最少的工作量原則 最少技巧性原則 最少錯誤原則 最少維護原則 減少記憶原則 總原則 先求正確後求快 先求清晰後求快 求快不忘保持程式正確性 保持程式整潔以求快 不要因效率而犧牲清晰 好程式標準 易於測試和除錯 易於維護 易於修改 設計簡單 高效率結構化程式設計主要包括兩方面 在編寫程...
程式設計珠璣第四章
正文裡面涉及到程式設計方法學的內容。不再細述 1 加及條件是0 l u n 1 2 這個函式可以寫成如下形式 int bs int a,int begin,int end,int v if e a end e v return e a return 1 再給一段測試 include include ...
MFC Windows 程式設計 第四章 選單
編譯一次後就不用再編譯了,而已加快程式編譯速度,一般將不更改的標頭檔案 c執行時標頭檔案和其他靜態型別標頭檔案包含在裡面。2 基於檢視的應用程式體系結構wm paint和使用者區滑鼠訊息 鍵盤訊息處理程式都必須在檢視中進行處理,所有在框架視窗使用onsetfocus 焦點傳遞給檢視 和過載oncmd...