在這裏插入圖片描述@[toc]
1、cat
-
全名:catenate
-
用途:顯示文件內容
-
常用選項
cat <選項> [fiel_name]
-n
:同時顯示行數
-
tac命令也是顯示文件內容
-
例子:顯示行數
dream:2_線性表(鏈式存儲) dream$ cat -n main.c 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stdbool.h> 4 5 typedef int Element; 6 typedef int Position; 7 typedef struct LinkNode *PtrLNode; ...
2、more
- 全名:more
- 用途:分頁顯示文件內容,空格或f翻頁,回車換行,q或Q退出
3、less
- 全名:less
- 用途:分頁顯示文件內容,可向上翻頁,還可以進行搜索
- 使用less命令後,可以按
/<匹配字符串>
進行搜索
4、head
-
全名:head
-
用途:不指定參數時顯示文件前10行
-
常用選項
head [選項] <file_name>
-n
:指定參數顯示文件前n行
-
例子:顯示前5行
dream:2_線性表(鏈式存儲) dream$ head -n 5 main.c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef int Element;
5、tail
-
全名:tail
-
用途:不指定參數顯示文件後10行
-
常用選項
tail [選項] <file_name>
-n
:指定行數-f
:動態顯示,可用於監控
6、grep
-
全名:grep
-
用途:在輸入數據中提取和匹配條件符合的字符串行,可作爲輸入數據的有文件內容,其它命令輸出等等
-
常用選項:比較常用的是將其它命令的輸出通過管道符
|
作爲grep
的輸入數據來查找grep [選項] "搜索內容" <文件名>
- 選項:
-A n
列出符合條件的行,並列出後續的n行-B n
列出符合條件的行,並列出前面的n行-c
統計找到的符合條件的字符串的次數-i
忽略大小寫-n
連行號一起輸出-v
反向查找(即查找和條件不匹配的行)--color=auto
搜索出的關鍵字用顏色顯示
- 選項:
-
例子
dream:tmp dream$ cat test.txt name age class grade xzj 20 10 90 wy 21 10 92 lq 19 8 95 wjy 20 10 94 ll 22 8 90 dream:tmp dream$ cat test.txt | grep -n "xzj" 2:xzj 20 10 90 dream:tmp dream$ cat test.txt | grep -nv "xzj" 1:name age class grade 3:wy 21 10 92 4:lq 19 8 95 5:wjy 20 10 94 6:ll 22 8 90
|
管道符用於連接兩個命令,即將前一個命令輸出作爲後一個命令輸入- 注意:管道符要求前面的命令必須正確
-
grep有一個常用用法
dream:tmp dream$ ps aux | grep bash # 查看進程時不加後面的grep -v grep dream 26126 0.0 0.0 4296240 1732 s001 S+ 8:17下午 0:00.03 -bash dream 12342 0.0 0.0 4296240 1368 s000 S 五09下午 0:00.70 -bash dream 26852 0.0 0.0 4267752 816 s000 S+ 9:25下午 0:00.01 grep --color=auto bash dream:tmp dream$ ps aux | grep bash | grep -v grep dream 12342 0.7 0.0 4296240 1372 s000 S 五09下午 0:00.71 -bash dream 26126 0.0 0.0 4296240 1732 s001 S+ 8:17下午 0:00.03 -bash
7、sort
-
全名:sort
-
用途:依據不同的數據類型來進行排序
-
常用選項
sort [選項] <file>
-f
忽略大小寫-b
忽略每行前面的空白部分-n
以數值類型進行排序,默認使用的是字符串類型-r
反向排序-u
輸出重複行-t
指定分隔符,默認爲分隔符-k n[,m]
按照指定的字段範圍來排序,從第n個字段開始,到第m個字段結束,默認到行尾
-
例子
dream:tmp dream$ cat test.txt name age class grade xzj 20 10 90 wy 21 10 92 lq 19 8 95 wjy 20 10 94 ll 22 8 90 dream:tmp dream$ cat test.txt | grep -v name | sort -k 4 # 可以看到並沒有按最後一個字段排序,因爲不是使用的按數值類型排序 ll 22 8 90 lq 19 8 95 xzj 20 10 90 wy 21 10 92 wjy 20 10 94 dream:tmp dream$ cat test.txt | grep -v name | sort -n -k 4 # 按數值類型排序 ll 22 8 90 xzj 20 10 90 wy 21 10 92 wjy 20 10 94 lq 19 8 95
8、uniq
- 全名:unique
- 用途:取消重複行,同
sort -u
9、wc
-
全名:word count
-
用途:用於統計文本的行數、單詞數或字符數,輸入可爲文件或其它命令輸出
-
常用選項:
wc [選項] <file>
-l
只統計行數-w
只統計單詞數-m
只統計字符數
-
例子
dream:tmp dream$ wc /etc/passwd 108 294 6774 /etc/passwd dream:tmp dream$ ls | wc -w # 查看當前目錄下有多少文件和目錄 13
-
使用wc命令統計服務器上有多少個正常連接
dream:tmp dream$ netstat -an | grep ESTABLISH tcp4 0 0 192.168.1.12.60945 104.84.122.120.443 ESTABLISHED tcp4 0 0 192.168.1.12.58060 163.177.81.141.8080 ESTABLISHED tcp4 0 0 192.168.1.12.57507 17.188.166.16.5223 ESTABLISHED tcp4 0 0 192.168.1.12.57502 17.57.144.116.5223 ESTABLISHED dream:tmp dream$ netstat -an | grep ESTABLISH | wc -l 4
10、awk
(1)awk介紹
- awk編程用於在Linux/UNIX下對文本和數據進行處理,處理的數據可以來自標準輸入、一個或多個文件,或者其它命令的輸出
- awk的機理:逐行掃描數據,尋找匹配特定條件的行,並在這些行上進行指定動作
- gawk是awk的GNU版本,在Linux中,awk已經被鏈接到gawk
- awk的基本語法和c語言類似
(2)awk基本使用
-
printf格式化輸出
-
在awk中可以識別print輸出和printf輸出(print會自動加換行符,而printf不會),但是在Bash中只能識別標準格式化輸出printf
printf '<輸出類型|輸出格式>' <輸出內容>
- 輸出類型:
%ns
輸出字符串,表示輸出n個字符(不加n默認爲輸出一個字符串)%ni
輸出n個整數數字%m.nf
輸出浮點數,m表示整數位數,n表示小數位數
- 輸出格式:即轉義字符
- 輸出類型:
-
注意,printf只能輸出具體數據,不能輸出文件內容或使用管道符
[dream@192 ~]$ printf 'hello, word!\n' hello, word! [dream@192 ~]$ printf '%s\n' $(date) # 將date的輸出作爲printf的輸入 2020年 03月 08日 星期日 00:24:00 CST
-
-
awk的內置變量
-
awk命令格式
awk '條件1{動作1} [條件2{動作2} ...]' <文件名>
- 條件:一般使用關係表達式作爲條件,如下
- 動作:格式化輸出/流程控制語句
- 例子:下面兩個例子都沒有設定條件,所以是每一行都執行了動作
[dream@192 tmp]$ cat test.txt
1 aaaa 123
2 bbb 456
3 ccccc 78
[dream@192 tmp]$ awk '{printf $1 "\t" $3 "\n"}' test.txt # 輸出第1列和第3列第內容
1 123
2 456
3 78
[dream@192 tmp]$ df -h | awk '{printf $1 "\t\t" $3 "\n"}' # 使用管道符將其它命令輸出作爲輸入
文件系統 已用
/dev/mapper/centos-root 4.7G
devtmpfs 0
tmpfs 0
tmpfs 18M
tmpfs 0
/dev/sda1 179M
tmpfs 4.0K
tmpfs 32K
# 該語句和 df -h | awk '{print $1 "\t\t" $3}' 效果相同,print語句會自動換行
(3)awk的條件使用
-
BEGIN
和END
的使用dream:~ dream$ df -h | awk 'BEGIN{print "磁盤使用"} {print $1 "\t\t" $3} END{print "結束!"}' 磁盤使用 Filesystem Used /dev/disk1s1 96Gi devfs 335Ki /dev/disk1s4 4.0Gi map 0Bi map 0Bi 結束!
- BEGIN和END只會執行一次
-
關係運算符的使用
dream:tmp dream$ cat test.txt name age class grade xzj 20 10 90 wy 21 10 92 lq 19 8 95 wjy 20 10 94 ll 22 8 90 dream:tmp dream$ cat test.txt | grep -v name | awk '$4>92 {print $0}' # grep -v是反向查找,這裏是去除有name的一行 # $n(n不爲0)表示第n列,而$0表示awk當前讀入的一整行數據 # awk是一行一行掃描數據,這裏就是awk對輸入的數據一行一行比較第4列,符合條件的就執行動作{print $0} lq 19 8 95 wjy 20 10 94
(4)awk流程控制
-
awk中可以寫一些複雜的語句
dream:tmp dream$ cat test.txt name age class grade xzj 20 10 90 wy 21 10 92 lq 19 8 95 wjy 20 10 94 ll 22 8 90 dream:tmp dream$ awk 'NR==2{n1=$4} NR==3{n2=$4} NR==4{n3=$4} NR==5{n4=$4} NR==6{n5=$4; sum=n1+n2+n3+n4+n5; avarage=sum/5; print "the avarage is "avarage}' test.txt the avarage is 92.2
- 多個條件{動作}可以使用空格分隔,也可以使用回車分隔
- 在一個動作中,若有多條語句,使用
;
分開 - 在awk中,變量的賦值與調用都不用加
$
(5)awk函數
-
awk中可以自定義函數,如下
function <func_name> (parameters){ fucn_body }
-
例子如下
dream:tmp dream$ cat test.txt name age class grade xzj 20 10 90 wy 21 10 92 lq 19 8 95 wjy 20 10 94 ll 22 8 90 dream:tmp dream$ awk 'function output(name, grade){print name":"grade} NR>=2{output($1, $4)}' test.txt # 函數一般定義在最開頭 xzj:90 wy:92 lq:95 wjy:94 ll:90
-
(6)awk中腳本調用
-
當把awk語句寫入腳本中,調用腳本時使用
-f
選項來將文件讀入腳本,例如dream:tmp dream$ cat test.txt name age class grade xzj 20 10 90 wy 21 10 92 lq 19 8 95 wjy 20 10 94 ll 22 8 90 dream:tmp dream$ cat test.awk #!/bin/bash BEGIN{print "hello----"} NR==2{n1=$4} NR==3{n2=$4} NR==4{n3=$4} NR==5{n4=$4} NR==6{n5=$4; sum=n1+n2+n3+n4+n5; avarage=sum/5; print "the avarage is "avarage} END{print "end!!!!!!"} dream:tmp dream$ chmod 755 test.awk dream:tmp dream$ awk -f test.awk test.txt hello---- the avarage is 92.2 end!!!!!!