類似于編程的正則表達(dá)式
[a-z],[A-Z],[0-9][^非] ^開(kāi)頭$結(jié)尾 .任意一個(gè)字符 *重復(fù)前一個(gè)字符(0或多個(gè))
'\{重復(fù)次數(shù)n\}' ?'\{重復(fù)次數(shù)n1,\}' ? '\{重復(fù)次數(shù)n1,n2\}'
? :0-1,+ :1~,| :or,(分組)
格式化打印:printf
printf '%10s %5i %5i %5i %8.2f \n'`cat filename.txt | grep -v name`
sed: sed [-nefr] [動(dòng)作]
動(dòng)作說(shuō)明: [n1[,n2]]function
n1, n2 :不見(jiàn)得會(huì)存在,一般代表『選擇進(jìn)行動(dòng)作的行數(shù)』,舉例來(lái)說(shuō),如果我的動(dòng)作
是需要在 10 到 20 行之間進(jìn)行的,則『 10,20[動(dòng)作行為] 』
function 有底下這些咚咚:
a :新增, a 的后面可以接字符串,而這些字符串會(huì)在新的一行出現(xiàn)(目前的下一行)~
c :取代, c 的后面可以接字符串,這些字符串可以取代 n1,n2 之間的行!
d :刪除,因?yàn)槭莿h除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字符串,而這些字符串會(huì)在新的一行出現(xiàn)(目前的上一行);
p :打印,亦即將某個(gè)選擇的數(shù)據(jù)印出。通常 p 會(huì)與參數(shù) sed -n 一起運(yùn)作~
s :取代,可以直接進(jìn)行取代的工作哩!通常這個(gè) s 的動(dòng)作可以搭配 正規(guī)表示法!例如 1,20s/old/new/g 就是啦!
eg:刪除2-5行: nl /etc/passwd | sed '2,5d'
取包含inet關(guān)鍵字的那一行,只取IP地址(其余使用sed 's替換為空' ):
ifconfig eth0 | grep 'inet ' |sed 's/.*addr://g'|sed 's/Bcast:.*//g'
awk: awk '條件類型1{動(dòng)作a;動(dòng)作b;...} 條件類型2{動(dòng)作c..}... ' filename
eg: last |awk '{printf $1 "\t" $3"\n"}'last | awk '{printf $1 "\t lines:"NR"\t columes:"NF"\n"}'
第三欄小于 10 以下的數(shù)據(jù),并且僅列出賬號(hào)與第三欄:
cat /etc/passwd | awk '{FS=":"} $3 < 10 {printf $1 "\t" $3 "\n"}' ? --第二行開(kāi)始
cat /etc/passwd | awk 'BEGIN{FS=":"} $3 < 10 {printf $1 "\t" $3 "\n"}' ?--第一行開(kāi)始
awk執(zhí)行流程:
1. 讀入第一行,并將第一行的資料填入 $0, $1, $2.... 等變數(shù)當(dāng)中;
2. 依據(jù) "條件類型" 的限制,判斷是否需要進(jìn)行后面的 "動(dòng)作";
3. 做完所有的動(dòng)作與條件類型;
4. 若還有后續(xù)的『行』的數(shù)據(jù),則重復(fù)上面 1~3 的步驟,直到所有的數(shù)據(jù)都讀完為止。
awk變量:
變量名稱
代表意義
NF
每一行 ($0) 擁有的字段總數(shù)
NR
目前 awk 所處理的是『第幾行』數(shù)據(jù)
FS
目前的分隔字符,預(yù)設(shè)是空格鍵
文檔比較:diff,cmp
diff: diff [-biB] srcFilename destFilename ?比較出所有的不同
eg: 文檔比較:diff /etc/passwd /tmp/test/passwd
目錄比較:diff /etc /tmp/test
cmp: cmp [-s]?srcFilename destFilename ? 輸出第一個(gè)不同點(diǎn) 行列
eg: 文檔比較:cmp?/etc/passwd /tmp/test/passwd