1. 程式人生 > >shell正則表達二

shell正則表達二

shell正則表達式 二

shell正則表達 二部分

技術分享

一、printf命令:

1. 格式化輸出。(print format)

2. 命令格式:

printf‘打印格式‘實際內容

技術分享

1. 打印格式:

1) \a(警告聲音輸出)

技術分享

1) \b(退格鍵)

技術分享

1) \n(輸出新的一行)


技術分享

1) \r(幀處於行的開始,即enter鍵)

技術分享

\t(水平的table鍵)

技術分享

1) \v(垂直的table鍵)

技術分享

1) \xNN(x為ASCII碼十六進制表示;NN為倆位數數字;可轉換數字成為字符)

技術分享

1) %ns(n為數字;s代表string,即多少個字符)

技術分享

1) %ni(n為數字;i代表integer,即多少整數字符)

技術分享

1) %N.nf(n、N為數字;f代表floating浮點,小數字數即小數點)

技術分享

1. 例子:

1) 以整數形式輸出23並換行,以字符串形式輸出hello並換行

技術分享

2位整數形式輸出23並換行,以7位字符串形式輸出hello

技術分享

案例文本

技術分享

輸出結果沒有對齊

技術分享

如上,可設置字段格式使之對齊(字符串長度、整數及小數點長度)


二、awk命令:

三、awk 則比較傾向於一行當中分成數個字段來處理。

.awk語言的最基本功能是在文件或字符串中基於指定規則來分解抽取信息,也可以基於指定的規則來輸出數據。

1) 命令行方式

awk [-F field-separator] ‘commands‘ input-files

[-F field-separator],域分隔符,默認為空格或tab;

commands為awk命令;input-files為待處理文件。

Linux系統使用環境變量IFS存儲分隔符;

技術分享

查看默認分隔符


技術分享

oldIFS=$IFS(把環境變量IFS存到oldIFS)


IFS=","(定義分隔符為,)


技術分享

之後把環境變量返回原值(空格/tab)。

1) shell腳本方式

技術分享

1) awk命令插入一個單獨文件,然後調用

Awk -f awk-script-file input-files

其中,-f選項加載awk-script-file中的awk腳本,input-files跟上面的是一樣的。

1) 正則表達式用作awk_pattern: /regexp/

例如:awk ‘/ ^[a-z]/‘ input_file

2) 布爾表達式用作awk_pattern,表達式成立時,觸發相應的actions執行。

表達式中可以使用變量(如字段變量$1,$2等)和/regexp/

② 布爾表達式中的操作符:

關系操作符: < > <= >= == !=
匹配操作符: value ~ /regexp/ 如果value匹配/regexp/,則返回真
value !~ /regexp/ 如果value不匹配/regexp/,則返回真
例如: awk ‘$2 > 10 {print "ok"}‘ input_file
awk ‘$3 ~ /^d/ {print "ok"}‘ input_file

③ &&(與) 和 ||(或) 可以連接兩個/regexp/或者布爾表達式,構成混合表達式。!(非) 可以用於布爾表達式或者/regexp/之前。

a) 正則表達式(/regexp/)

技術分享

passwd中小寫字母a到d開頭的。

a) 布爾表達式

變量(如字段變量$1 $2)和/regexp/;

關系操作

技術分享

: < > <= >= == !=

提取test.txt中chinese大於75為優秀。
匹配操作符: value ~ /regexp/ 如果value匹配/regexp/,則返回真
value !~ /regexp/ 如果value不匹配/regexp/,則返回真;

技術分享

提取passwd中匹配d開頭的顯示ok。

a) &&(與)、||(或)

技術分享

模式包括兩個特殊字段 BEGINEND。使用BEGIN語句設置計數和打印頭。BEGIN語句使用在任何文本瀏覽動作之前,之後文本瀏覽動作依據輸入文本開始執行。END語句用來在awk完成文本瀏覽動作後打印輸出文本總數和結尾狀態標誌。

1) 動作:

實際動作在大括號{ }內指明。動作大多數用來打印。

1. awk的運行過程:

如果BEGIN 區塊存在,awk執行它指定的actions

awk從輸入文件中讀取一行,稱為一條輸入記錄。(如果輸入文件省略,將從標準輸入讀取)

awk將讀入的記錄分割成字段,將第1個字段放入變量$1中,第2個字段放入$2,以此類推。$0表示整條記錄。

把當前輸入記錄依次與每一個awk_cmdawk_pattern比較,看是否匹配,如果相匹配,就執行對應的actions。如果不匹配,就跳過對應的actions,直到比較完所有的awk_cmd

當一條輸入記錄比較了所有的awk_cmd後,awk讀取輸入的下一行,繼續重復步驟,這個過程一直持續,直到awk讀取到文件尾。

awk讀完所有技術分享的輸入行後,如果存在END,就執行相應的actions

1) /etc/passwd文件 顯示文件中用戶名和登錄shel技術分享

顯示文件中用戶名和登錄shell,中間以逗號分隔

技術分享

顯示文件中UID大於500的所有用戶的用戶名和登錄shell

技術分享


顯示/etc/passwd文件中的UID大於500的用戶名和登錄shell,而賬戶與shell之間以逗號分割,而且在所有行添加列名name,shell,在最後一行添加"blue,/bin/nosh"

技術分享

函數及腳本的綜合應用

1shell函數:shell允許將一組命令集或語句形成一個可用塊,這些塊稱為shell函數。

函數由兩部分組成:函數標題、函數體。標題是函數名。函數體是函數內的命令集合。標題名應該唯一;如果不是,將會混淆結果,因為腳本在查看調用腳本前將首先搜索函數調用相應的shell

技術分享



技術分享





本文出自 “chaixinwang” 博客,請務必保留此出處http://chaixinwang.blog.51cto.com/13052229/1945129

shell正則表達二