如果想快速簡單的瞭解shell 編程,這裡也給個簡單的教程連結:http://www.ooblick.com/text/sh/
還有深入一點的cu shell版鎮板之寶經典十三問http://bbs2.chinaunix.net/thread-218853-1-1.html
如果想快速瞭解awk,而沒有時間閱讀那個長長的e文的manual,請看下文。如果想好好學習awk,這裡還有本好書:http://www.douban.com/subject/1876898/
sed的還想尋找
原文連結:http://fanqiang.chinaunix.net/program/other/2005-09-07/3621.shtml
awk的調用方式
前面曾經說過,awk提供了適應多種需要的不同解決方案,它們是:
一、awk命令列,你可以象使用普通UNIX命令一樣使用awk,在命令列中你也可以使用awk程式設計語言,雖然awk支援多行的錄入,但是錄入長長的命令列並保證其正確無誤卻是一件令人頭疼的事,因此,這種方法一般只用於解決簡單的問題。當然,你也可以在shell script程式中引用awk命令列甚至awk程式指令碼。
二、使用-f選項調用awk程式。awk允許將一段awk程式寫入一個文字檔,然後在awk命令列中用-f選項調用並執行這段程式。具體的方法我們將在後面的awk文法中講到。
三、利用命令直譯器調用awk程式:利用UNIX支援的命令直譯器功能,我們可以將一段awk程式寫入文字檔,然後在它的第一行加上:
#!/bin/awk -f
並賦予這個文字檔以執行的許可權。這樣做之後,你就可以在命令列中用類似於下面這樣的方式調用並執行這段awk程式了。
$awk指令碼文本名 待處理檔案
awk的文法:
與其它UNIX命令一樣,awk擁有自己的文法:
awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]
參數說明:
-F re:允許awk更改其欄位分隔符號。
parameter: 該參數協助為不同的變數賦值。
'prog': awk的程式語句段。這個語句段必須用單拓號:'和'括起,以防被shell解釋。這個程式語句段的標準形式為:
'pattern {action}'
其中pattern參數可以是egrepRegex中的任何一個,它可以使用文法/re/再加上一些樣式匹配技巧構成。與sed類似,你也可以使用","分開兩樣式以選擇某個範圍。關於匹配的細節,你可以參考附錄,如果仍不懂的話,找本UNIX書學學grep和sed(本人是在學習ed時掌握匹配技術的)。action參數總是被大括弧包圍,它由一系統awk語句組成,各語句之間用";"分隔。awk解釋它們,並在pattern給定的樣式匹配的記錄上執行其操作。與shell類似,你也可以使用“#”作為注釋符,它使“#”到行尾的內容成為注釋,在解釋執行時,它們將被忽略。你可以省略pattern和action之一,但不能兩者同時省略,當省略pattern時沒有樣式匹配,表示對所有行(記錄)均執行操作,省略action時執行預設的操作——在標準輸出上顯示。
-f progfile:允許awk調用並執行progfile指定有程式檔案。progfile是一個文字檔,他必須符合awk的文法。
in_file:awk的輸入檔案,awk允許對多個輸入檔案進行處理。值得注意的是awk不修改輸入檔案。如果未指定輸入檔案,awk將接受標準輸入,並將結果顯示在標準輸出上。awk支援輸入輸出重新導向。
awk的記錄、欄位與內建變數:
前面說過,awk處理的工作與資料庫的處理方式有相同之處,其相同處之一就是awk支援對記錄和欄位的處理,其中對欄位的處理是grep和sed不能實現的,這也是awk優於二者的原因之一。在awk中,預設的情況下總是將文字檔中的一行視為一個記錄,而將一行中的某一部分作為記錄中的一個欄位。為了操作這些不同的欄位,awk借用shell的方法,用$1,$2,$3...這樣的方式來順序地表示行(記錄)中的不同欄位。特殊地,awk用$0表示整個行(記錄)。不同的欄位之間是用稱作分隔字元的字元分隔開的。系統預設的分隔字元是空格。awk允許在命令列中用-F
re的形式來改變這個分隔字元。事實上,awk用一個內建的變數FS來記憶這個分隔字元。awk中有好幾個這樣的內建變數,例如,記錄分隔字元變數RS、當前工作的記錄數NR等等,本文後面的附表列出了全部的內建變數。這些內建的變數可以在awk程式中引用或修改,例如,你可以利用NR變數在模式比對中指定工作範圍,也可以通過修改記錄分隔字元RS讓一個特殊字元而不是分行符號作為記錄的分隔字元。
例:顯示文字檔myfile中第七行到第十五行中以字元%分隔的第一欄位,第三欄位和第七欄位:
awk -F % 'NR==7,NR==15 {printf $1 $3 $7}'
awk的內建函數
awk之所以成為一種優秀的程式設計語言的原因之一是它吸收了某些優秀的程式設計語言(例如C)語言的許多優點。這些優點之一就是內建函數的使用,awk定義並支援了一系列的內建函數,由於這些函數的使用,使得awk提供的功能更為完善和強大,例如,awk使用了一系列的字串處理內建函數(這些函數看起來與C語言的字串處理函數相似,其使用方式與C語言中的函數也相差無幾),正是由於這些內建函數的使用,使awk處理字串的功能更加強大。本文後面的附錄中列有一般的awk所提供的內建函數,這些內建函數也許與你的awk版本有些出入,因此,在使用之前,最好參考一下你的系統中的線上說明。
作為內建函數的一個例子,我們將在這裡介紹awk的printf函數,這個函數使得awk與c語言的輸出相一致。實際上,awk中有許多引用形式都是從C語言借用過來的。如果你熟悉C語言,你也許會記得其中的printf函數,它提供的強大格式輸出功能曾經帶我們許多的方便。幸運的是,我們在awk中又和它重逢了。awk中printf幾乎與C語言中一模一樣,如果你熟悉C語言的話,你完全可以照C語言的模式使用awk中的printf。因此在這裡,我們只給出一個例子,如果你不熟悉的話,請隨便找一本C語言的入門書翻翻。
例:顯示檔案myfile中的行號和第3欄位:
$awk '{printf"%03d%s\n",NR,$1}' myfile
在命令列使用awk
按照順序,我們應當講解awk程式設計的內容了,但在講解之前,我們將用一些例子來對前面的知識進行回顧,這些例子都是在命令列中使用的,由此我們可以知道在命令列中使用awk是多麼的方便。這樣做的原因一方面是為下面的內容作鋪墊,另一方面是介紹一些解決簡單問題的方法,我們完全沒有必要用複雜的方法來解決簡單的問題----既然awk提供了較為簡單的方法的話。
例:顯示文字檔mydoc匹配(含有)字串"sun"的所有行。
$awk '/sun/{print}' mydoc
由於顯示整個記錄(全行)是awk的預設動作,因此可以省略action項。
$awk '/sun/' mydoc
例:下面是一個較為複雜的匹配的樣本:
$awk '/[Ss]un/,/[Mm]oon/ {print}' myfile
它將顯示第一個匹配Sun或sun的行與第一個匹配Moon或moon的行之間的行,並顯示到標準輸出上。
例:下面的樣本顯示了內建變數和內建函數length()的使用:
$awk 'length($0)>80 {print NR}' myfile
該命令列將顯示文本myfile中所有超過80個字元的行號,在這裡,用$0表示整個記錄(行),同時,內建變數NR不使用標誌符'$'。
例:作為一個較為實際的例子,我們假設要對UNIX中的使用者進行安全性檢查,方法是考察/etc下的passwd檔案,檢查其中的passwd欄位(第二欄位)是否為"*",如不為"*",則表示該使用者沒有設定密碼,顯示出這些使用者名稱(第一欄位)。我們可以用如下語句實現:
#awk -F: '$2=="" {printf("%s no password!\n",$1' /etc/passwd
在這個樣本中,passwd檔案的欄位分隔符號是“:”,因此,必須用-F:來更改預設的欄位分隔符號,這個樣本中也涉及到了內建函數printf的使用。
awk的變數
如同其它程式設計語言一樣,awk允許在程式語言中設定變數,事實上,提供變數的功能是程式設計語言的其本要求,不提供變數的程式設計語言本人還從未見過。
awk提供兩種變數,一種是awk內建的變數,這前面我們已經講過,需要著重指出的是,與後面提到的其它變數不同的是,在awk程式中引用內建變數不需要使用標誌符"$"(回憶一下前面講過的NR的使用)。awk提供的另一種變數是自訂變數。awk允許使用者在awk程式語句中定義並調用自已的變數。當然這種變數不能與內建變數及其它awk保留字相同,在awk中引用自訂變數必須在它前面加上標誌符"$"。與C語言不同的是,awk中不需要對變數進行初始化,awk根據其在awk中第一次出現的形式和上下文確定其具體的資料類型。當變數類型不確定時,awk預設其為字串類型。這裡有一個技巧:如果你要讓你的awk程式知道你所使用的變數的明確類型,你應當在在程式中給它賦初值。在後面的執行個體中,我們將用到這一技巧。
運算與判斷:
作為一種程式設計語言所應具有的特點之一,awk支援多種運算,這些運算與C語言提供的幾本相同:如+、-、*、/、%等等,同時,awk也支援C語言中類似++、--、+=、-=、=+、=-之類的功能,這給熟悉C語言的使用者編寫awk程式帶來了極大的方便。作為對運算功能的一種擴充,awk還提供了一系列內建的運算函數(如log、sqr、cos、sin等等)和一些用於對字串進行操作(運算)的函數(如length、substr等等)。這些函數的引用大大的提高了awk的運算功能。
作為對條件轉移指令的一部分,關係判斷是每種程式設計語言都具備的功能,awk也不例外。awk中允許進行多種測試,如常用的==(等於)、!=(不等於)、>(大於)、<(小於)、>=(大於等於)、>=(小於等於)等等,同時,作為樣式匹配,還提供了~(匹配於)和!~(不匹配於)判斷。
作為對測試的一種擴充,awk也支援用邏輯運算子:!(非)、&&(與)、||(或)和括弧()進行多重判斷,這大大增強了awk的功能。本文的附錄中列出了awk所允許的運算、判斷以及操作符的優先順序。
awk的流程式控制制
流程式控制制語句是任何程式設計語言都不能缺少的部分。任何好的語言都有一些執行流程式控制制的語句。awk提供的完備的流程式控制制語句類似於C語言,這給我們編程帶來了極大的方便。
1、BEGIN和END:
在awk中兩個特別的運算式,BEGIN和END,這兩者都可用於pattern中(參考前面的awk文法),提供BEGIN和END的作用是給程式賦予初始狀態和在程式結束之後執行一些掃尾的工作。任何在BEGIN之後列出的操作(在{}內)將在awk開始掃描輸入之前執行,而END之後列出的操作將在掃描完全部的輸入之後執行。因此,通常使用BEGIN來顯示變數和預置(初始化)變數,使用END來輸出最終結果。
例:累計銷售檔案xs中的銷售金額(假設銷售金額在記錄的第三欄位):
$awk
>'BEGIN { FS=":";print "統計銷售金額";total=0}
>{print $3;total=total+$3;}
>END {printf "銷售金額總計:%.2f",total}' sx
(註:>是shell提供的第二提示符,如要在shell程式awk語句和awk語言中換行,則需在行尾加反斜線\)
在這裡,BEGIN預置了內部變數FS(欄位分隔符號)和自訂變數total,同時在掃描之前顯示出輸出行頭。而END則在掃描完成後列印出總合計。
2、流程式控制制語句
awk提供了完備的流程式控制制語句,其用法與C語言類似。下面我們一一加以說明:
2.1、if...else語句:
格式:
if(運算式)
語句1
else
語句2
格式中"語句1"可以是多個語句,如果你為了方便awk判斷也方便你自已閱讀,你最好將多個語句用{}括起來。awk分枝結構允許嵌套,其格式為:
if(運算式1)
{if(運算式2)
語句1
else
語句2
}
語句3
else {if(運算式3)
語句4
else
語句5
}
語句6
當然實際操作過程中你可能不會用到如此複雜的分枝結構,這裡只是為了給出其樣式罷了。
2.2、while語句
格式為:
while(運算式)
語句
2.3、do-while語句
格式為:
do
{
語句
}while(條件判斷語句)
2.4、for語句
格式為:
for(初始運算式;終止條件;步長運算式)
{語句}
在awk的 while、do-while和for語句中允許使用break,continue語句來控制流程程走向,也允許使用exit這樣的語句來退出。break中斷當前正在執行的迴圈並跳到迴圈外執行下一條語句。continue從當前位置跳到迴圈開始處執行。對於exit的執行有兩種情況:當exit語句不在END中時,任何操作中的exit命令表現得如同到了檔案尾,所有模式或操作執行將停止,END模式中的操作被執行。而出現在END中的exit將導致程式終止。
例:為了
awk中的自訂函數
定義和調用使用者自己的函數是幾乎每個進階語言都具有的功能,awk也不例外,但原始的awk並不提供函數功能,只有在nawk或較新的awk版本中才可以增加函數。
函數的使用包含兩部分:函數的定義與函數調用。其中函數定義又包括要執行的代碼(函數本身)和從主程式碼傳遞到該函數的臨時調用。
awk函數的定義方法如下:
function 函數名(參數表){
函數體
}
在gawk中允許將function省略為func,但其它版本的awk不允許。函數名必須是一個合法的標誌符,參數表中可以不提供參數(但在調用函數時函數名後的一對括弧仍然是不可缺少的),也可以提供一個或多個參數。與C語言相似,awk的參數也是通過值來傳遞的。
在awk中調用函數比較簡單,其方法與C語言相似,但awk比C語言更為靈活,它不執行參數有效性檢查。換句話說,在你調用函數時,可以列出比函數預計(函數定義中規定)的多或少的參數,多餘的參數會被awk所忽略,而不足的參數,awk將它們置為預設值0或Null 字元串,具體置為何值,將取決於參數的使用方式。
awk函數有兩種返回方式:隱式返回和顯式返回。當awk執行到函數的結尾時,它自動地返回到調用程式,這是函數是隱式返回的。如果需要在結束之前退出函數,可以明確地使用返回語句提前退出。方法是在函數中使用形如:return 傳回值 格式的語句。
例:下面的例子示範了函數的使用。在這個樣本中,定義了一個名為print_header的函數,該函數調用了兩個參數FileName和PageNum,FileName參數傳給函數當前使用的檔案名稱,PageNum參數是當前頁的頁號。這個函數的功能是列印(顯示)出當前檔案的檔案名稱,和當前頁的頁號。完成這個功能後,這個函數將返回下一頁的頁號。
nawk
>'BEGIN{pageno=1;file=FILENAME
>pageno=print_header(file,pageno);#調用函數print_header
>printf("當前頁頁號是:%d\n",pageno);
>}
>#定義函數print_header
>function print_header(FileName,PageNum){
>printf("%s %d\n",FileName,PageNum); >PageNum++;return PageNUm;
>}
>}' myfile
執行這個程式將顯示如下內容:
myfile 1
當前頁頁號是:2
awk進階輸入輸出
1.讀取下一條記錄:
awk的next語句導致awk讀取下一個記錄並完成模式比對,然後立即執行相應的操作。通常它用匹配的模式執行操作中的代碼。next導致這個記錄的任何額外匹配模式被忽略。
2.簡單地讀取一條記錄
awk的 getline語句用於簡單地讀取一條記錄。如果使用者有一個資料記錄類似兩個物理記錄,那麼getline將尤其有用。它完成一般欄位的分離(設定欄位變數$0 FNR NF NR)。如果成功則返回1,失敗則返回0(到達檔案尾)。如果需簡單地讀取一個檔案,則可以編寫以下代碼:
例:樣本getline的使用
{while(getline==1)
{
#process the inputted fields
}
}
也可以使getline儲存輸入資料在一個欄位中,而不是通過使用getline variable的形式處理一般欄位。當使用這種方式時,NF被置成0,FNR和NR被增值。
使用者也可以使用getline<"filename"方式從一個給定的檔案中輸入資料,而不是從命令列所列內容輸入資料。此時,getline將完成一般欄位分離(設定欄位變數$0和NF)。如果檔案不存在,返回-1,成功,返回1,返回0表示失敗。使用者可以從給定檔案中讀取資料到一個變數中,也可以用stdin(標準輸入裝置)或一個包含這個檔案名稱的變數代替filename。值得注意的是當使用這種方式時不修改FNR和NR。
另一種使用getline語句的方法是從UNIX命令接受輸入,例如下面的例子:
例:樣本從UNIX命令接受輸入
{while("who -u"|getline)
{
#process each line from the who command
}
}
當然,也可以使用如下形式:
"command" | getline variable
3.關閉檔案:
awk中允許在程式中關閉一個輸入或輸出檔案,方法是使用awk的close語句。
close("filename")
filename可以是getline開啟的檔案(也可以是stdin,包含檔案名稱的變數或者getline使用的確切命令)。或一個輸出檔案(可以是stdout,包含檔案名稱的變數或使用管道的確切命令)。
4.輸出到一個檔案:
awk中允許用如下方式將結果輸出到一個檔案:
printf("hello word!\n")>"datafile"
或
printf("hello word!\n")>>"datafile"
5.輸出到一個命令
awk中允許用如下方式將結果輸出到一個命令:
printf("hello word!\n")|"sort-t','"
awk與shell script混合編程
因為awk可以作為一個shell命令使用,因此awk能與shell批次程式很好的融合在一起,這給實現awk與shell程式的混合編程提供了可能。實現混合編程的關鍵是awk與shell script之間的對話,換言之,就是awk與shell script之間的資訊交流:awk從shell script中擷取所需的資訊(通常是變數的值)、在awk中執行shell命令列、shell script將命令執行的結果送給awk處理以及shell script讀取awk的執行結果等等。
1.awk讀取Shell script程式變數
在awk中我們可以通過“'$變數名'”的方式讀取sell scrpit程式中的變數。
例:在下面的樣本中,我們將讀取sell scrpit程式中的變數Name,該變數存放的是文本myfile的撰寫者,awk將列印出這個人名。
$cat writename
:
# @(#)
#
.
.
.
Name="張三" nawk 'BEGIN {name="'Name'";\ printf("\t%s\t撰寫者%s\n",FILENAME,name");}\
{...}END{...}' myfile
.
.
.
2.將shell命令的執行結果送給awk處理
作為資訊傳送的一種方法,我們可以將一條shell命令的結果通過管道線(|)傳遞給awk處理:
例:樣本awk處理shell命令的執行結果
$who -u | awk '{printf("%s正在執行%s\n",$2,$1)}'
該命令將列印出註冊終端正在執行的程式名。
3.shell script程式讀awk的執行結果
為了實現shell script程式讀取awk執行的結果,我們可以採取一些特殊的方法,例如我們可以用變數名=`awk語句`的形式將awk執行的結果存放入一個shell script變數。當然也可以用管道線的方法將awk執行結果傳遞給shell script程式處理。
例:作為傳送訊息的機制之一,UNIX提供了一個向其所有使用者傳送訊息的命令wall(意思是write to all寫給所有使用者),該命令允許向所有工作中的使用者(終端)發送訊息。為此,我們可以通過一段shell批次程式wall.shell來類比這一程式(事實上比較老的版本中wall就是一段shell批次程式:
$cat wall.shell
:
# @(#) wall.shell:發送訊息給每個登入終端
#
cat >/tmp/$$
#使用者錄入訊息文本 who -u | awk '{print $2}' | while read tty
do
cat /tmp/$$>$tty
done
在這個程式裡,awk接受who -u命令的執行結果,該命令列印出所有登入終端的資訊,其中第二個欄位是登入終端的裝置名稱,因此用awk命令析出該裝置名稱,然後用while read tty語句迴圈讀出這些檔案名稱到變數(shell script變數)tty中,作為資訊傳送的終結地址。
4.在awk中執行shell命令列----嵌入函數system()
system()是一個不適合字元或數字類型的嵌入函數,該函數的功能是處理作為參數傳遞給它的字串。system對這個參數的處理就是將其作為命令處理,也就是說將其當作命令列一樣加以執行。這使得使用者在自己的awk程式需要時可以靈活地執行命令或指令碼。
例:下面的程式將使用system嵌入函數列印使用者編製好的報表檔案,這個檔案存放在名為myreport.txt的檔案中。為簡約起見,我們只列出了其END部分:
.
.
.
END {close("myreport.txt");system("lp myreport.txt");}
在這個樣本中,我們首先使用close語句關閉了檔案myreport.txt檔案,然後使用system嵌入函數將myreport.txt送入印表機列印。
寫到這裡,我不得不跟朋友們說再見了,實在地說,這些內容仍然是awk的初步知識,電腦永遠是前進的科學,awk也不例外,本篇所能做的只是在你前行的漫漫長途中鋪平一段小小開端,剩下的路還得靠你自己去走。老實說,如果本文真能給你前行的路上帶來些許的方便,那本人就知足了!
如對本篇有任何疑問,請E-mail To:Chizlong@yeah.net或到首頁http://chizling.yeah.net/中留言。
附錄:
1.awk的常規運算式元字元
\ 換碼序列
^ 在字串的開頭開始匹配
$ 在字串的結尾開始匹配
. 與任何單個字串匹配
[ABC] 與[]內的任一字元匹配
[A-Ca-c] 與A-C及a-c範圍內的字元匹配(按字母表順序)
[^ABC] 與除[]內的所有字元以外的任一字元匹配
Desk|Chair 與Desk和Chair中的任一個匹配
[ABC][DEF] 關聯。與A、B、C中的任一字元匹配,且其後要跟D、E、F中的任一個字元。
* 與A、B或C中任一個出現0次或多次的字元相匹配
+ 與A、B或C中任何一個出現1次或多次的字元相匹配
? 與一個空串或A、B或C在任何一個字元相匹配
(Blue|Black)berry 合并常規運算式,與Blueberry或Blackberry相匹配
2.awk算術運算子
運算子 用途
------------------
x^y x的y次冪
x**y 同上
x%y 計算x/y的餘數(求模)
x+y x加y
x-y x減y
x*y x乘y
x/y x除y
-y 負y(y的開關符號);也稱一目減
++y y加1後使用y(前置加)
y++ 使用y值後加1(尾碼加)
--y y減1後使用y(前置減)
y-- 使用後y減1(尾碼減)
x=y 將y的值賦給x
x+=y 將x+y的值賦給x
x-=y 將x-y的值賦給x
x*=y 將x*y的值賦給x
x/=y 將x/y的值賦給x x%=y 將x%y的值賦給x
x^=y 將x^y的值賦給x
x**=y 將x**y的值賦給x
3.awk允許的測試:
操作符 含義
x==y x等於y
x!=y x不等於y
x>y x大於y
x>=y x大於或等於y
x<y x小於y
x<=y x小於或等於y?
x~re x匹配Regexre?
x!~re x不匹配Regexre?
4.awk的操作符(按優先順序升序排列)
= 、+=、 -=、 *= 、/= 、 %=
||
&&
> >= < <= == != ~ !~
xy (字串連結,'x''y'變成"xy")
+ -
* / %
++ --
5.awk內建變數(預定義變數)
說明:表中v項表示第一個支援變數的工具(下同):A=awk,N=nawk,P=POSIX awk,G=gawk
V 變數 含義 預設值
--------------------------------------------------------
N ARGC 命令列參數個數
G ARGIND 當前被處理檔案的ARGV標誌符
N ARGV 命令列參數數組
G CONVFMT 數字轉換格式 %.6g
P ENVIRON UNIX環境變數
N ERRNO UNIX系統錯誤訊息
G FIELDWIDTHS 輸入欄位寬度的空白分隔字串
A FILENAME 當前輸入檔案的名字
P FNR 目前記錄數
A FS 輸入欄位分隔符號 空格
G IGNORECASE 控制大小寫敏感0(大小寫敏感)
A NF 目前記錄中的欄位個數
A NR 已經讀出的記錄數
A OFMT 數位輸出格式 %.6g
A OFS 輸出欄位分隔符號 空格
A ORS 輸出的記錄分隔字元 新行
A RS 輸入的記錄他隔符 新行
N RSTART 被匹配函數匹配的字串首
N RLENGTH 被匹配函數匹配的字串長度
N SUBSEP 下標分隔字元 "\034"
6.awk的內建函數
V 函數 用途或傳回值
------------------------------------------------
N gsub(reg,string,target) 每次常規運算式reg匹配時替換target中的string
N index(search,string) 返回string中search串的位置
A length(string) 求串string中的字元個數
N match(string,reg) 返回常規運算式reg匹配的string中的位置
N printf(format,variable) 格式化輸出,按format提供的格式輸出變數variable。
N split(string,store,delim) 根據分界符delim,分解string為store的數組元素
N sprintf(format,variable) 返回一個包含基於format的格式化資料,variables是要放到串中的資料
G strftime(format,timestamp) 返回一個基於format的日期或者時間串,timestmp是systime()函數返回的時間
N sub(reg,string,target) 第一次當常規運算式reg匹配,替換target串中的字串
A substr(string,position,len) 返回一個以position開始len個字元的子串
P totower(string) 返回string中對應的小寫字元
P toupper(string) 返回string中對應的大寫字元
A atan(x,y) x的餘切(弧度)
N cos(x) x的餘弦(弧度)
A exp(x) e的x冪
A int(x) x的整數部分
A log(x) x的自然對數值
N rand() 0-1之間的隨機數
N sin(x) x的正弦(弧度)
A sqrt(x) x的平方根
A srand(x) 初始化隨機數發生器。如果忽略x,則使用system()
G system() 返回自1970年1月1日以來經過的時間(按秒計算)