grep(global research expression,檔案過濾器,根據模式將匹配到的行顯示出來,#grep [options] pattern file,使用方法詳見
基礎》)
sed(stream editor,流編輯器,把每行讀到記憶體空間(模式空間),預設不編輯原始檔,僅對模式空間的資料作處理,處理結束將模式空間列印至螢幕,#sed [options] 『addresscommand』 file1...)
awk(三個人名的首字母a.w.k.,gawk(gnu awk,linux上實現的awk),nawk(new awk),報告生成器,在文字檔案中抽取符合條件的資訊,並以特定格式顯示)
#awk options 『scripts』 file1 file2
#awk options 『pattern』 file1 file2(根據模式將匹配到資料的行作處理,一般的處理就是列印)
注:根據模式每次從檔案中抽取一行,對這行按指定的分隔符進行切片,若沒指定分隔符預設是按空白字元(空格)切片,指定分隔符使用-fseperater,例如文字內容:this is a test,被切成四個片段,而這每個片段在awk內部能用變數來引用,這個變數類似指令碼程式設計中的位置引數變數,$1表示this,$2表示is,$0表示這行全部(可以切割的還有cut)
舉例:#awk -f: 『』 /etc/passwd($1和$2條目間用逗號分開)
#awk 『begin』 /etc/passwd
#cut -d: -f1,3 /etc/passwd
列印:print;printf
print item1,item2,……
注意:各item間用逗號分隔,輸出時預設各條目引用的內容用空白字元分隔;
輸出的item(可以是字串,數值,當前記錄的字段$1,$2等變數,awk的表示式(若是數值會先轉為字串而後才輸出));
item若省略則是輸出全部內容,如print $0;
若想輸出空白行,使用print 「」;
printf 「format」,item1,item2
注意:
與print最大不同,printf輸出時要指定格式;
format要用雙引號引起來,它用於指定後面item輸出時的格式,格式與格式間不用分隔符分隔;
printf不會自動列印換行符;
format的指示符都以%開頭,後跟乙個字元,有:%c(顯示字元的ascii碼),%d和%i(十進位制整數),%e和%e(科學計數法顯示數值),%f(浮點數),%g和%g(科學計數法或浮點數格式顯示數值),%s(字串),%u(無符號整數),%%(顯示%自身)
修飾符有:-(表示左對齊),+(顯示數值符號),num(表示數字,顯示寬度)
舉例:#awk -f: 『』 /etc/passwd
awk變數:
內建變數(記錄變數):
fs(field separator,讀取文字檔案時使用的字段分隔符,預設空白字元,屬輸入分隔符);
rs(record separator,輸入文字資訊時所使用的換行符,屬輸入分隔符);
ofs(output fs);
ors(output rs);
內建變數(資料變數):
nr(the total number ofinput records seen so far,所處理過的行數,若是多個檔案,則是已處理過的多個檔案的總行數,只要是處理過的統統全部記錄,是絕對計數,例如#awk 『』 /etc/passwd /etc/shadow);
fnr(the input recordnumber in the current input file,記錄的是正處理的行是當前這一檔案中被處理的總行數的第多少行,是不同檔案各自計數,例如#awk 『』 /etc/passwd /etc/shadow);
nf(the number of fieldsin the current input record,總字段數,例如#awk -f: '/root/' /etc/passwd)
注意:nf與$nf的區別,如#awk -f: 『』 /etc/passwd(nf是總字段數,$nf是最後乙個字段)
自定義變數:
#awk -v test=」hello world」 『begin』(方式一)
#awk 『begin』(方式二,注意action中有多個語句要用分號分隔,awk中引用變數值時不用加$)
awk操作符:
算術操作符(+,-,*,/,%,^)
賦值操作符(=,+=,-=,*=,/=,%=,^=,++,--,**=,|)
比較操作符(
<,
<=,>,>=,==,!=,~,!~,element in array)
如:x~y(x是字串,y是模式,x能被y匹配到則為真,否則假)
x!~y(x不能被y匹配到則為真,否則假)
element in array(資料組中有這個元素則為真,否則假)
表示式間的邏輯關係(&&,||)
條件表示式(selector?if-true-exp:if-false-exp,相當於if條件判斷)
awk的模式:
正規表示式regexp,格式為:/regular express/
表示式expression
匹配範圍ranges,用逗號分隔,如pattern1,pattern2
begin(在第一行執行前就執行)
end(在最後一行執行完才執行)
空模式(對檔案的每一行都處理)
舉例:#awk -f: 『/^r/』 /etc/passwd
#awk -f: 『$3==0,$7~」nologin」』 /etc/passwd
#awk -f: 『$3>=500』 /etc/passwd
#awk -f: 『$7~」bash$」 /etc/passwd
#awk -f: 『$7!~」bash$」 /etc/passwd
#awk -f: 『beginend』 /etc/passwd
awk的action(除列印print,printf外):
expression(賦值表示式,判斷表示式)
control statement(可使用if,for,while,case等語句,還可定義函式)
compound statement(復合語句)
awk的控制語句control statement:
if-else語法:if(condition) else (其中then-body僅乙個語句時花括號可省)
while語法:while(condition)(若statement僅乙個語句時花括號可省)
do-while語法:do while
for語法一:for (variable assignment;condition;interation process)
for語法二:for(variable in array) (陣列中應用)
case語法:switch(expression)
break,continue
next(提前結束本行文字的處理,接著處理下一行)
舉例:#awk -f: 『』 /etc/passwd
#awk -f: -v sum=0 『end』 /etc/passwd
#awk -f: 『;i++}}』 /etc/passwd(length為awk的內建函式)
#awk -f: 『』 /etc/passwd
#awk -f: 『end}』 /etc/passwd(統計當前系統各類shell的個數,print外的花括號可省)
#netstat -tan | awk 『/^tcp/end』(統計tcp的不同狀態,重要!!!常用)
#awk 『end』 /var/log/httpd/access_log(統計日誌中各單客戶端ip連線數)
注:awk陣列中下標是從1開始的(而bash中的陣列下標是從0開始),而且awk陣列中下標可以不是數字,可自定義任意字串,例如上面幾個例子中的shell[/bin/bash]++,shell[/sbin/nologin]++,state[listen]++,state[established]++,count[192.168.1.59]++,count[192.168.1.222]++
第二階段小結
資料結構基本概念 資料 資料即資訊的載體,是能夠輸入到計算機中並且能被計算機識別,儲存和處理的符號總稱 資料元素 資料元素是資料的基本單位,又稱之為記錄。一般,資料元素由若干基本項 字段,域,屬性 組成。資料結構 資料結構指的是資料元素及資料元素之間的相互關係,或組織資料的形式 資料之間的結構關係 ...
第二階段小結
先是pta上的作業 這題要求我們熟練的掌握類之間的繼承與多型的使用,在類與類之間傳遞資訊時不能弄混,要弄清楚單一職責原則。這一題主要考察繼承與多型,泛型容器的應用。接下來是學習通上的課後作業 第乙個是單向鍊錶 單向鍊錶由乙個個的節點組成,這些節點都帶有下乙個節點的引用,最後乙個節點指向null,這樣...
vivi的第二階段
vivi 的第二階段 vivi 的第二階段是從 main 函式開始,同一般的 c語言程式一樣,該函式在 init main.c 檔案中,總共可以分為 8個步驟。1 函式開始,通過 putstr vivi banner 列印出vivi 的版本。vivi banner 在 init version.c ...