『忘了再學』Shell基礎 — 8、管道符介紹
- 2022 年 4 月 7 日
- 筆記
- 高級測試技能 - Shell基礎
我們之前已經有文章說過管道符了,今天這裡再簡單總結一下用法。
1、行提取命令grep
grep
命令的作用,是在指定的文件中,搜索符合條件的字符串。
命令格式:
[root@localhost ~ ] # grep [選項] 」搜索內容」 文件名
選項:
-A 數字
:列出符合條件的行,並列出後續的n行。-B 數字
:列出符合條件的行,並列出前面的n行。-c
:統計找到的符合條件的字符串的次數。-i
:忽略大小寫。-n
:輸出行號。-v
:反向查找。--color=auto
:搜索出的關鍵字用顏色顯示。
示例:
- 例子1:查找用戶信息文件
/etc/passwd
中,有多少可以登錄的用戶。[root@localhost ~]# grep "/bin/bash" /etc/passwd
- 例子2:查找用戶信息文件
/etc/passwd
中,包含有root
的行,並列出後續的3行。[root@localhost ~]# grep -A 3 "root" /etc/passwd
- 例子3:查找用戶信息文件
/etc/passwd
中,可以登錄的用戶,並顯示行號。[root@localhost ~]# grep -n "/bin/bash" /etc/passwd
- 例子4:查找用戶信息文件
/etc/passwd
中,不含有/bin/bash
的行,其實就是列出所有的偽用戶。[root@localhost ~]# grep -v "/bin/bash" /etc/passwd
2、find和grep的區別
find
命令是在系統當中搜索符合條件的文件名,搜索時文件名是完全匹配。如果需要模糊查詢,使用通配符進行匹配。
#建立文件abc
[root@localhost ~ ] # touch abc
#建立文件abcd
[root@localhost ~ ] # touch abcd
#查找abc文件
[root@localhost ~ ] # find . -name 」abc"
./abc
搜索文件名是abc
的文件,只會找到abc
文件,而不會找到文件abcd
。雖然abed
文件名中包含abc
,但是find
命令是完全匹配,只能和要搜索的數據完全一樣,才能找到。
注意:
find
命令是可以通過-regex
選項識別正則表達式規則的,也就是說find
命令可以按照正則表達式規則匹配,而正則表達式是模糊匹配。但是對於初學者而言,find
命令和grep
命令本身就不好理解,所以我們這裡只按照通配符規則來進行find
查詢。
grep
命令是在文件當中搜索符合條件的字符串,如果需要模糊查詢,使用正則表達式進行匹配,搜索時字符串是包含匹配。
#在test文件中寫入abc數據
[root@localhost ~ ] # echo abc > test
#在test文件中再追加abcd數據
[root@localhost ~]#echo abcd >> test
#在test文件中查找abc字符串
[root@localhost ~]#grep」abc" test
abc
abcd
grep
命令查找時,只要數據行中包含有abc
,就會都列出,所以abc
和abed
都可以查詢到。
3、管道符
管道符之前總結過,請看之前的文章://www.cnblogs.com/liuyuelinfighting/p/15530010.html。
我們下面簡單的做幾個練習:
- 練習1:
查詢本地所有網絡連接,提取包含ESTABLISHED(已建立連接)的行,就可以知道我們的服務器上有多少已經成功連接的網絡連接。[root@localhost ~]# netstat -an | grep "ESTABLISHED"
- 練習2:
如果想知道具體的網絡連接數量,就可以再使用wc
命令統計行數。[root@localhost ~]# netstat -an | grep "ESTABLISHED" | wc -l
4、通配符
通配符是用來匹配文件名的,文件名在查詢的時候是完全匹配的,必須一模一樣才會查詢出,否則就要加通配符,進行模糊查詢。
練習:
# 創建4個測試文件
[root@localhost tmp]# touch abc
[root@localhost tmp]# touch abcd
[root@localhost tmp]# touch 012
[root@localhost tmp]# touch 0abc
# 「*」代表查找所有的文件
[root@localhost tmp]# ls *
012 0abc abc abcd
# 「?"匹配任意一個字符,所以會匹配0abc
#但是不能匹配abc,因為「?」"不能匹配空
[root@localhost tmp]# ls ?abc
0abc
# 匹配任何以數字開頭的文件
[root@localhost tmp]# ls [0-9]*
012 0abc
# 匹配不已數字開頭的文件
[root@localhost tmp]# ls [^0-9]*
abc abed