跟馬哥學linux (lesson 8)awk & sed功能總結

一.awklinux

1.什麼是awk正則表達式

awk 是一種程序語言. 它具備通常程序語言常見的功能。 
因awk語言具備某些特色, 如 : 使用直譯器(Interpreter)不需先行編譯; 變量無類型之分(Typeless), 可以使用文字當數組的下標(Associative Array)...等特點. 所以, 使用awk撰寫程序比起使用其它語言更簡潔便利且節省時間. awk還具備一些內建功能, 使得awk善於處理具數據行(Record), 字段(Field)型態的資料; 此外, awk內建有pipe的功能, 可將處理中的數據傳送給外部的 Shell命令加以處理, 再將Shell命令處理後的數據傳回awk程序, 這個特色也使得awk程序很容易使用系統資源。express

2.awk語法vim

SYNOPSIS  
數組

awk [options] 'program' file file ...  
awk [options] 'PATTERN{action}' file file ...    
less

注:linux版本的awk爲一個軟連接,連接到gawk編輯器

Pattern:通常常使用 "關係表達式"(Relational expression) 來充當ide

Actions:是由許多awk指令構成 包含:print, printfspa

3.awk內建變量命令行

變量名 變量說明
$0 整個一行
$1 第一個字段
$2 第二個字段
NF 字段數
NR 行數,全部文件的一併計數
FNR 行數,各文件分別計數
ARGV 數組,保存命令自己這個字符
ARGC 保存awk命令中參數的個數
FILENAME 正在處理的當前文件的名稱


自定義變量:

-v VAR_NAME=VALUE

變量名區分字符大小寫;

(1) 能夠program中定義變量;  
(2) 能夠命令行中經過-v選項自定義變量;

4.printf

命令的使用格式:printf format, item1, item2,...

(1) 要指定format;  
(2) 不會自動換行;如需換行則須要給出\n    
(3) format用於爲後面的每一個item指定其輸出格式;

format格式的指示符都%開頭,後跟一個字符:  
%c: 顯示字符的ASCII碼;    
%d, %i: 十進制整數;    
%e, %E: 科學計數法顯示數值;    
%f: 顯示浮點數;    
%g, %G: 以科學計數法格式或浮點數格式顯示數值;    
%s: 顯示字符串;

%u: 顯示無符號整數;  
%%: 顯示%自身;

修飾符:  
#:顯示寬度    
-:左對齊    
+:顯示數值的符號    
.#: 取值精度

p_w_picpath    

5.awk輸出重定向

將awk輸出的結果直接寫入文件

print items > output-file  
print items >> output-file

例  
p_w_picpath

 

6.模式

(1) Regexp: 格式爲/PATTERN/  
僅處理被/PATTERN/匹配到的行;    
(2) Expression: 表達式,其結果爲非0或非空字符串時知足條件;    
僅處理知足條件的行;    
(3) Ranges: 行範圍,此前地址定界,    
NR    
僅處理範圍內的行    
(4) BEGIN/END: 特殊模式,僅在awk命令的program運行以前(BEGIN)或運行以後(END)執行一次;    
(5) Empty:空模式,匹配任意行;

p_w_picpath

p_w_picpath

7.

action

(1) Expressions  
(2) Control statements    
(3) Compound statements    
(4) input statements    
(5) output statements

8.控制語句

if—else

格式:if (condition) {then body} else {else body}

p_w_picpath

while  
            格式:while (condition) {while body}

p_w_picpath

注:沒有設置結束條件容易產生死循環

do-while循環  
            格式:do {do-while body} while (condition)

for循環  
            格式:for (variable assignment; condition; iteration process) {for body}

p_w_picpath

case語句  
            語法:switch (expression) {case VALUE or /RGEEXP/: statement1;... default: stementN}

 

二.sed

1.sed簡介

sed 是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲「模式空間」(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並無 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操做;編寫轉換程序等。

2.sed語法

sed [options] 'command' file(s)  
sed [options] -f scriptfile file(s) 

3. 元字符集

^:錨定行的開始 如:/^sed/匹配全部以sed開頭的行。   
$:錨定行的結束 如:/sed$/匹配全部以sed結尾的行。   
.:匹配一個非換行符的字符 如:/s.d/匹配s後接一個任意字符,而後是d。   
*:匹配零或多個字符 如:/*sed/匹配全部模板是一個或多個空格後緊跟sed的行。 
[]:匹配一個指定範圍內的字符,如/[Ss]ed/匹配sed和Sed。 
[^]:匹配一個不在指定範圍內的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。 
\(..\):保存匹配的字符,如s/\(love\)able/\1rs,loveable被替換成lovers。 
&:保存搜索字符用來替換其餘字符,如s/love/**&**/,love這成**love**。   
\< :錨定單詞的開始,如:/\<love/匹配包含以love開頭的單詞的行。   
\>  :錨定單詞的結束,如/love\>/匹配包含以love結尾的單詞的行。   
x\{m\} :重複字符x,m次,如:/0\{5\}/匹配包含5個o的行。   
x\{m,\} :重複字符x,至少m次,如:/o\{5,\}/匹配至少有5個o的行。   
x\{m,n\} :重複字符x,至少m次,很少於n次,如:/o\{5,10\}/匹配5--10個o的行。 

4.vim編輯中文本的查找替換:

地址定界s/要查找的內容/替換爲的內容/  
要查找的內容:可以使用正則表達式    
替換爲的內容:不支持正則表達式,但支持引用前面正則表達式分組中的內容    
地址定界:%, startline,endline

5.sed工做機制

每次讀取一行文本至「模式空間(pattern space)」中,在模式空間中完成處理;將處理結果輸出至標準輸出設備;

-r: 支持擴展正則表達式;  
-n: 靜默模式;    
-e script1 -e script2 -e script3:指定多腳本運行;    
-f /path/to/script_file:從指定的文件中讀取腳本並運行;    
-i: 直接修改源文件;

6.sed編輯命令

d 刪除

s 替換 %爲所有文件

i 插入,直接編輯文件

a 附加

7.練習

(1) 刪除/boot/grub/grub.conf文件中全部行的行首的空白字符;

p_w_picpath    
(2) 刪除/etc/fstab文件中全部以#開頭,後跟至少一個空白字符的行的行首的#和空白字符;

p_w_picpath    
(3) 把/etc/fstab文件的奇數行另存爲/tmp/fstab.3;

p_w_picpath    
(4) echo一個文件路徑給sed命令,取出其基名;進一步地,取出其路徑名;

p_w_picpath

p_w_picpath

相關文章
相關標籤/搜索