一.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: 顯示無符號整數;
%%: 顯示%自身;
修飾符:
#:顯示寬度
-:左對齊
+:顯示數值的符號
.#: 取值精度
例
5.awk輸出重定向
將awk輸出的結果直接寫入文件
print items > output-file
print items >> output-file
6.模式
(1) Regexp: 格式爲/PATTERN/
僅處理被/PATTERN/匹配到的行;
(2) Expression: 表達式,其結果爲非0或非空字符串時知足條件;
僅處理知足條件的行;
(3) Ranges: 行範圍,此前地址定界,
NR
僅處理範圍內的行
(4) BEGIN/END: 特殊模式,僅在awk命令的program運行以前(BEGIN)或運行以後(END)執行一次;
(5) Empty:空模式,匹配任意行;
例
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}
while
格式:while (condition) {while body}
注:沒有設置結束條件容易產生死循環
do-while循環
格式:do {do-while body} while (condition)
for循環
格式:for (variable assignment; condition; iteration process) {for body}
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文件中全部行的行首的空白字符;
(2) 刪除/etc/fstab文件中全部以#開頭,後跟至少一個空白字符的行的行首的#和空白字符;
(3) 把/etc/fstab文件的奇數行另存爲/tmp/fstab.3;