uniq
-d:僅顯示重復過的行
-c:顯示重復行的次數
-u:僅顯示不曾重復的行
sed的高級應用:
數據先存放到保持空間,然后在進入模式空間進行處理,按照規則依次輸出
awk
netstat -tan | awk ‘/^tcp/{state[$NF]++}END{for(i in state){print i,state[i]}}’
數組引用
若要遍歷數組的每個元素,要是用for循環
for(var in array){for-body}
注意:var會遍歷array的每個索引
split:
netstat -tan | awk ‘/^tcp\>/{split($5,ip,”:”);count[ip[1]]++}END{for(i in count){print i,count[i]}}’
常用的文本處理實例:
(一)、搜索IP地址
1、ifconfig eth0 | grep -o “\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}”
2、ifconfig eth0 | sed -n ‘2p’ | awk ‘{print $2}’
(二)、分區利用率
1、df -h | awk ‘{print $5}’ | awk -F ‘%’ ‘{print $1}’
2、df -h | tr -s ‘ ‘ | cut -d ‘ ‘ -f 5
\1:引用前面所匹配的內容 適用于\(\)分組所匹配到的內容
&:vim模式或者sed模式,引用前面所匹配的內容
sed ‘s/quiet/& net\.ifnames=0/’ /etc/default/grub
例如:添加用戶bash、testbash、basher、nologin,找出當前系統中用戶名和默認shell類型相同的用戶
grep “\(^[[:alnum:]]\+\).*\1$” /etc/passwd
字符類
字符類 說明
[[:alpha:]] 小寫及大寫字母,等價于[a-zA-Z]
[[:alnum:]] 小寫和大寫字母及數字,等價于[a-zA-Z0-9]
[[:cntrl:]] 控制字符,如制表符(Tab)、換行符或反斜線
[[:digit:]] 數字0~9,等價于[0-9]
[[:graph:]] ASCII碼從33~126之間的可打印字符
[[:lower:]] 小寫字母,等價于[a-z]
[[:punct:]] 標點符號,包括問號、句號、逗號、冒號、分號、單引號、英文的重音符或中文的間隔號(`)、!、@、#、%、^、&、*、左右括號、左右中括號、左右大括號、正斜杠(/)、-、_
[[:upper:]] 大寫字母,等價于[A-Z]
[[:space:]] 空白字符,包括空格、水平制表符、垂直制表符、換行、換頁、回車
[[:xdigit:]] 十六進制字符,等價于[a-fA-F0-9]
通配符
元字符 作用
* 匹配0個或任意多個字符,也就是可以匹配任何內容
? 匹配任意一個字符
[] 匹配[ ]中任意一個字符
[-] 匹配括號中任意一個字符,-代表一個范圍,例如:[a-z]代表匹配一個小寫字母
[^] 邏輯非,表示匹配不是中括號內的一個字符,例如[^0-9]代表匹配一個不是數字的字符
shell編程
變量:
局部變量:生效范圍是當前shell進程;對當前shell之外的其他shell進程包括當前shell的子shell無效
環境變量:對當前shell和子shell均有效
本地變量:只對當前shell進程的代碼中有效
算數運算:
實現算數運算:
let var=算數表達式
var=$[算數表達式] 將算數表達式的結果賦值給var
變量作用域:
環境變量:當前shell以及子shell均有效
本地變量:當前shell以及函數內的變量均有效
局部變量:僅作用于函數體內部,當函數執行完成,局部變量會自動銷毀失效
數組:
聲明數組:declare -a array
-A array 聲明關聯數組
數組賦值:
array_name=(“value1” “value2″…)
引用數組元素:
${array[index]}
${array[@]} 數組所有元素
${array[*]}
${#array[*]}數組元素的個數
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/92622