管道命令pipe
1 選取命令
選取信息的分析 一般都是一行一行的來的:
1.1 cut
cut是切的意思,也就是把某一段的信息的某部分切出來,處理信息是以行爲單位的。即把一行的想要的信息拿出來:
命令 | 作用 |
---|---|
cut -d ‘分隔符’ -f fields | 用於有特定分隔符字符 |
cut -c 字符區間 | 用於排列整齊的訊息 |
選項與參數:
- -d :後面接分隔字符。與 -f 一起使用;\
- -f :依據-d後面的分隔符將一段訊息分區成爲數段,用-f提取出第幾段;
- -c:以字符的單位取出固定字符區間;
將PATH變量取出 提取第n個路徑
$ echo ${PATH} 輸出PATH信息,信息以:分隔開來
$ echo ${PATH} | cut -d ':' -f 5 提取第五個信息
$ echo ${PATH} | cut -d ':' -f 3,5 提取第三個,第五個信息
$ echo ${PATH} | cut -d ':' -f 1-5 提取第一到五個信息
以:爲分隔符 提取第5個信息以及第一個和第五個
獲取export輸出信息的第12個字符及以後內容
export輸出的內容 ,前11個字符是一樣的,那麼獲取後面不一樣的字符可以使用cut -c
$ export |cut -c 12-
$ export | cut -c 1-11
只留下第12個字符及以後的內容:export |cut -c 12-
同樣也可以把前11個字符截取出來: export | cut -c 1-11,注意 字符的位置是從1開始的
從last信息裏面只取出用戶名
$ last | cut -d ' ' -f 1 以空格爲分隔符取出第一個信息 即用戶名
1.2 grep
cut是取出一行裏面想要的信息,而grep是 對每一行進行分析 假設這一行裏面有我們想要的信息,那就把這一行取出來。
$ grep [-achinv] [--color=auto ] '搜索字符' filename
選項與參數:
- -a:將binary文件以text文件的方式進行搜索
- -c:計算找到‘搜索字符串’的次數
- -i:忽略大小寫
- -n:輸出行號
- -v:反向選擇,顯示沒有‘搜索字符串’內容的行
- –color=auto:可以將找到的關鍵詞部分加上顏色顯示;
- -o:僅僅將搜索字符串顯示出來
使用例子:
找出含有‘yinhui’的信息:
提取出含有‘yinhui’信息的第一個數據,有兩種方法,可以用之前的cut,也可以用-o選項
將不含有‘yinhui’的信息取出來
統計出現‘yinhui’字符的行的數量
排序命令
sort
sort時進行排序的命令,可以依據不同的數據形態進行排序。
$ sort [-fbMnrtuk] [file or stdin]
選項與參數:
- -f:忽略大小寫的差異
- -b:忽略最前面的空格符部分
- -M: 以月份的名字來排序例如JAN。DEC
- -n:使用純數字來排序(默認是文字形態)
- -r:反向排序
- -u:就是unique,相同數據,僅出現一行爲代表;
- -t:分隔符,預設是【tab】鍵
- -k:以那個區間(field)來排序
排序記錄在/etc/paswd下的個人賬戶
$ cat /etc/passwd |sort
默認以第一個數據來排序,並且默認文字性 a-z
以第三欄排序 /etc/paswd 內容
/etc/paswd 內容是以:分隔開的
$ cat /etc/passwd | sort -t ':' -k 3
利用last 將輸出的數據僅提取賬號,並加以排序 並且一個賬號只出現一次
uniq
如果排序完了,但是我只想每個相同的數據出現一次怎麼辦呢?答案就是unique命令
$ uniq [-ic]
- -c:計數
- -i :忽略大小寫
使用last將賬號列表列出,取出賬號那一欄,進行排序只取一位:
$ last | cut -d ' ' -f 1| sort |uniq //只篩選一個
$ last | cut -d ' ' -f 1| sort -u //等同於上條命令
$ last | cut -d ' ' -f 1| sort |uniq -c // 每個用戶登入的次數
wc命令
如果想知道一個文件裏面有多少個字符、字節、多少行,可以使用wc這個命令
$ wc [-lwm]
選項與參數:
- -l:僅列出行
- -w:僅列出多少字(英文單字)
- -m:多少字符
統計一個文件有 多少行 多少字多少字符,
直接只使用wc默認全部統計 :按上面列出來的順序
使用last 可以輸出登入者的信息,但是last的最後兩行並非賬號內容,如何一一行指令取得登入系統的總人次?
$ last | grep [a-zA-Z] | grep -v 'wtmp' | grep -v 'reboot' | grep -v 'unknow' | wc -l
空白符 、wtmp、unknow、reboot、unknow等無關賬號登入者的信息,利用grep取出非空字符,反向選擇沒有那幾個關鍵字的那幾行,在計算行數。