Linux命令之三劍客
阿新 • • 發佈:2020-08-28
三劍客在Linux中功能強大,下面所說的是Linux中最重要的三個命令在業界被稱為“三劍客”,它們分別是awk,sed,grep。三劍客是(grep,sed,awk)三者的簡稱,熟練使用這三個工具可以提升運維效率。Linux 三劍客以正則表示式作為基礎,而在Linux系統中,支援兩種正則表示式,分別為“標準正則表示式”和“擴充套件正則表示式”。在這裡將介紹三劍客命令的用法。
我們知道Linux下一切皆檔案,對Linux的操作就是對檔案的處理,三劍客命令可以幫助我們更好的處理檔案。 三劍客的功能非常強大,但我們只需要掌握他們分別擅長的領域即可:grep擅長查詢功能,sed擅長取行和替換。awk擅長取列。
因為涉及到正則表示式,所以我們首先介紹元字元,便於大家更好地理解使用。
元字元 | 功能 | 意思 |
---|---|---|
^ | 匹配行首 | 表示以某個字元開頭 |
$ | 匹配行尾 | 表示以某個字元結尾 |
^$ | 空行的意思 | 表示空行的意思 |
. | 匹配任意單個字元 | 表示任意一個字元 |
***** | 字元* 匹配0或多個此字元 | 表示重複的任意多個字元 |
** | 遮蔽一個元字元的特殊含義 | 表示去掉有意義的元字元的含義 |
[] | 匹配中括號內的字元 | 表示過濾括號內的字元 |
.* | 代表任意多個字元 | 就是代表任意多個字元 |
lele{n} | 用來匹配前面lele出現次數。n為次數 | 就是統計前面lele出現的次數 |
lele{n,} |
含義同上,但次數最少為n | 從功能就可以看出 |
lele{n,m} | 義同上,但lele出現次數在n與m之間 | 從功能也可以看出 |
lele{n,m} | 義同上,但lele出現次數在n與m之間 | 從功能也可以看出 |
awk #三劍客之老大,擅長取列。
#取列,計算,統計,陣列,迴圈,判斷 -F #指定分割符,預設是以空白字元為分隔符 NR #表示行號 NF #表示每一行的列數 $NF #表示最後一列 $0 #整行內容 $n #n是數字 表示取出哪一列 && #並且 || #或者 ! #排除 ’ #取出連續的 ; #多條命令分割 #取行 [root@lxy ~]# awk 'NR==1' passwd #取出第一行 root:x:0:0:root:/root:/bin/bash [root@lxy ~]# awk 'NR==1,NR==3' passwd #取出第一行到第三行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@lxy ~]# awk 'NR==1;NR==3' passwd #取出第一行和第三行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@lxy ~]# awk 'NR>10' passwd #取出大於10行的所有行的的內容 root [root@lxy ~]# awk 'NR<2' passwd #取出小於兩行的內容 root:x:0:0:root:/root:/bin/bash [root@lxy ~]# awk 'NR<=2' passwd #小於等於 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@lxy ~]# awk 'NR>=10' passwd #大於等於 operator:x:11:0:operator:/root:/sbin/nologin root [root@lxy ~]# awk 'NR>=1 && NR<=10' passwd #取出大於等於第一行並且小於等於第十行 && 並且 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin [root@lxy ~]# awk 'NR>0 && NR<11' passwd #取出大於等於第一行並且小於等於第十行 && 並且 [root@lxy ~]# awk 'NR<2 || NR>10' passwd #取出小於2行或者大於10行 || 或者 root:x:0:0:root:/root:/bin/bash root [root@lxy ~]# awk '{print NR,$0}' passwd #顯示行號 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin 11 root [root@lxy ~]# awk '/root/' passwd #過濾出root的字串 root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin root [root@lxy ~]# awk '/^root/' passwd #過濾出以root開頭的字串 root:x:0:0:root:/root:/bin/bash root [root@lxy ~]# awk '/root$/' passwd #過濾出以root為結尾的字串 root [root@lxy ~]# awk '/root|adm/' passwd #過濾出root或者adm的字串 root:x:0:0:root:/root:/bin/bash adm:x:3:4:adm:/var/adm:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin root [root@lxy ~]# awk '/root/;/adm/' passwd #過濾出root或者adm的字串 root:x:0:0:root:/root:/bin/bash adm:x:3:4:adm:/var/adm:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin root [root@lxy ~]# awk '/adm/,/sync/' passwd #過濾以adm的行到sync的行 adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync [root@lxy ~]# awk 'BEGIN{FS=":"}{print $7}' passwd #取出檔案的第七列 /bin/bash /sbin/nologin /sbin/nologin /sbin/nologin /sbin/nologin /bin/sync /sbin/shutdown /sbin/halt /sbin/nologin /sbin/nologin [root@lxy ~]# awk -F: '{print $7}' passwd #取出檔案的第七列 /bin/bash /sbin/nologin /sbin/nologin /sbin/nologin /sbin/nologin /bin/sync /sbin/shutdown /sbin/halt /sbin/nologin /sbin/nologin [root@lxy ~]# awk -F '[:]' '{print $7}' passwd /bin/bash /sbin/nologin /sbin/nologin /sbin/nologin /sbin/nologin /bin/sync /sbin/shutdown /sbin/halt /sbin/nologin /sbin/nologin [root@lxy ~]# awk -F: '{print $NF}' passwd #取出檔案中的每一行的最後一列 /bin/bash /sbin/nologin /sbin/nologin /sbin/nologin /sbin/nologin /bin/sync /sbin/shutdown /sbin/halt /sbin/nologin /sbin/nologin root [root@lxy ~]# echo 'oldboy:123 oldgirl' >>passwd [root@lxy ~]# awk '{print $2}' passwd |tail -1 oldgirl [root@lxy ~]# awk -F: '{print $2}' passwd |tail -1 123 oldgirl [root@lxy ~]# awk -F '[: ]' '{print $2}' passwd |tail -1 #支援多個分隔符 123 #取出ip地址 [root@lxy ~]# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::c653:602a:38c6:e45 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:ae:0b:8a txqueuelen 1000 (Ethernet) RX packets 3515748 bytes 5009905896 (4.6 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 382062 bytes 54939915 (52.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@lxy ~]# ifconfig eth0 |awk 'NR==2' inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255 [root@lxy ~]# ifconfig eth0 |awk 'NR==2' |awk '{print $2}' 10.0.0.100 [root@lxy ~]# ifconfig eth0 |awk 'NR==2{print $2}' 10.0.0.100 #取出ip地址 [root@lxy ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:ae:0b:8a brd ff:ff:ff:ff:ff:ff inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::c653:602a:38c6:e45/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@lxy ~]# ip a s eth0 | awk 'NR==3' | awk -F '[ /]*' '{print $2}' inet [root@lxy ~]# ip a s eth0 | awk 'NR==3' | awk -F '[ /]*' '{print $3}' 10.0.0.100 [root@lxy ~]# ip a s eth0 | awk 'NR==3' | awk -F '[ /]' '{print $6}' 10.0.0.100 [root@lxy ~]# awk 'NR!=1' passwd #排除第一列 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin root oldboy:123 oldgirl [root@lxy ~]# awk '!/root/' passwd #排除包含root的字串 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin oldboy:123 oldgirl [root@lxy ~]# [root@lxy ~]# awk -F: '/^root/{print $NF}' passwd #取出滿足以root開頭的行並且打印出該行的最後一列 /bin/bash root [root@lxy ~]# awk -F: '/^root/{print $1,$2}' passwd #列印多列內容 root x root [root@lxy ~]# awk -F: '/^root/{print $3,$1}' passwd #把第三列和第一列倒著顯示 0 root root
sed #三劍客老二,擅長增刪改查,取行和替換。
-n #取消預設輸出
-i #真實的替換檔案內容
-r #支援擴充套件正則
內部命令:
p #列印
d #刪除
s #替換
g #全域性
a #追加
i #插入
; #多條命令的分割
, #表示連續的命令
1.查
[root@lxy ~]# sed -n '1p' passwd #列印單行
root:x:0:0:root:/root:/bin/bash
[root@lxy ~]# sed -n '1,3p' passwd #列印連續的多行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@lxy ~]# sed -n '1p;3p' passwd #列印不連續的多行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@lxy ~]# sed -n '$p' passwd #列印最後一行
ntp:x:38:38::/etc/ntp:/sbin/nologin
[root@lxy ~]# sed -n '/root/p' passwd #過濾包含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# sed -n '/^root/p' passwd #過濾以root開頭的行
root:x:0:0:root:/root:/bin/bash
[root@lxy ~]# sed -nr '/root|adm/p' passwd #過濾root或者adm的行
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# sed -n '/root/p;/adm/p' passwd #過濾root或者adm的行
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# sed -n '/^root/,/adm/p' passwd #過濾以root開頭的行到adm的行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
2.刪除
[root@lxy ~]# sed '1d' passwd #刪除第一行
[root@lxy ~]# sed '$d' passwd #刪除最後一行
[root@lxy ~]# sed '1,20d' passwd #刪除連續的多行
[root@lxy ~]# sed '1d;20d' passwd #刪除不連續的多行
[root@lxy ~]# sed '/root/d' passwd #刪除包含root的行
[root@lxy ~]# sed -r '/root|adm/d' passwd #刪除不連續的多行
[root@lxy ~]# sed '/root/d;/adm/d' passwd #刪除不連續的多行
[root@lxy ~]# sed '/^root/,/adm/d' passwd #刪除以root開頭的行到包含adm的行
[root@lxy ~]# sed '1,$d' passwd #刪除所有
3.增
[root@lxy ~]# sed '$aoldboy' sort.log #在檔案的最後一行追加oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
oldboy
[root@lxy ~]# sed '1aoldboy' sort.log #在檔案的第一行後面追加oldboy
abc/1
oldboy
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@lxy ~]# sed '1ioldboy' sort.log #在第一行的前面插入oldboy
oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@lxy ~]# sed '$ioldboy' sort.log #在最後一行前面插入oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
oldboy
fgrf/2
[root@lxy ~]# sed '1ioldboy\noldgirl' sort.log #插入多行
oldboy
oldgirl
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@lxy ~]# sed '$aoldboy\noldgirl' sort.log #追加多行
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
oldboy
oldgirl
4.替換
[root@lxy ~]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# sed 's#root#oldboy#g' passwd #把所有的root替換為oldboy 全域性替換
oldboy:x:0:0:oldboy:/oldboy:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
[root@lxy ~]# sed 's#root#oldboy#' passwd #替換每一行第一個匹配條件的
oldboy:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
[root@lxy ~]# sed '10s#root#oldboy#g' passwd #針對行進行替換
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
[root@lxy ~]# sed '10,11s#root#oldboy#g' passwd #操作多行替換
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
oldboy
[root@lxy ~]# sed '$s#root#oldboy#g' passwd #替換最後一行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy
[root@lxy ~]# sed '/^root/s#root#oldboy#g' passwd #替換以root開頭的行中root替換為oldboy
oldboy:x:0:0:oldboy:/oldboy:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy
[root@lxy ~]# sed '/t$/s#root#oldboy#g' passwd #匹配以t為結尾的進行替換
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy
grep #三劍客之老三,grep擅長查詢功能。
#文字過濾,給過濾出來的內容加上顏色
選項:
-v #排除,取反
-i #忽略大小寫
-n #給過濾出來的內容加上所在檔案的行號
-c #統計過慮出來的行數
-o #只顯示匹配的內容
-w #精確匹配
-E #支援擴充套件正則
-r #遞迴過濾
-R #遞迴過濾
-A #匹配內容向下多少行
-B #匹配內容向上多少行
-C #匹配內容向上向下各多少行
^ #以什麼開頭
$ #以什麼為結尾
^$ #空行
. #任意一個字元,換行符除外
.* #所有
\ #取消特殊符號的含義
| #擴充套件正則,或者
[root@lxy ~]# cp /etc/passwd ./
[root@lxy ~]# grep 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# grep '/sbin/nologin' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
www:x:666:666::/home/www:/sbin/nologin
nginx:x:665:665:nginx user:/var/cache/nginx:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
[root@lxy ~]# grep -v '/sbin/nologin' passwd #-v 排除
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
test:x:1000:1000::/home/test:/bin/bash
[root@lxy ~]# grep -i 'root' passwd #忽略大小寫
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ROOT
[root@lxy ~]# grep -n 'root' passwd #顯示該行內容在檔案的所在行號
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# grep -c 'root' passwd #統計匹配root字串的行數
2
[root@lxy ~]# grep -o 'root' passwd #只顯示匹配的內容
root
root
root
root
[root@lxy ~]# grep -o 'root' passwd | grep -c 'root' #統計匹配的root的次數
4
[root@lxy ~]# echo -e 'roott\nrootooo' >>passwd
[root@lxy ~]# grep 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
roott
rootooo
[root@lxy ~]# grep -w 'root' passwd #精確匹配root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# mkdir data
[root@lxy ~]# mkdir test
[root@lxy ~]# echo 'root' >>data/test.txt
[root@lxy ~]# echo 'root' >>test/data.txt
[root@lxy ~]# ll
total 680
drwxr-xr-x. 2 root root 22 Dec 3 18:04 data
-rw-r--r--. 1 root root 4 Dec 2 20:19 file.log
-rw-r--r--. 1 root root 27 Dec 2 19:31 file.txt
-rw-r--r--. 1 root root 158 Dec 2 19:26 hosts
-rw-r--r--. 1 root root 1100 Dec 3 18:01 passwd
-rw-r--r--. 1 root root 670293 Dec 2 19:36 services
drwxr-xr-x. 2 root root 22 Dec 3 18:04 test
-rw-r--r--. 1 root root 178 Dec 2 20:14 test.log
-rw-r--r--. 1 root root 16 Dec 2 19:23 test.txt
[root@lxy ~]# grep 'root' ./*
grep: ./data: Is a directory
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd 1094/tcp # ROOTD
./services:rootd 1094/udp # ROOTD
grep: ./test: Is a directory
[root@lxy ~]# grep -r 'root' ./* #遞迴過濾
./data/test.txt:root
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd 1094/tcp # ROOTD
./services:rootd 1094/udp # ROOTD
./test/data.txt:root
[root@lxy ~]# grep -R 'root' ./* #遞迴過濾
./data/test.txt:root
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd 1094/tcp # ROOTD
./services:rootd 1094/udp # ROOTD
./test/data.txt:root
[root@lxy ~]# grep 'root|adm' passwd
[root@lxy ~]# egrep 'root|adm' passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
roott
rootooo
[root@lxy ~]# grep -E 'root|adm' passwd #擴充套件正則 | 表示或者 -E 支援擴充套件正則
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
roott
rootooo
[root@lxy ~]# grep 'adm' passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@lxy ~]# grep -A2 'adm' passwd #匹配內容的行及向下兩行
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
[root@lxy ~]# grep -B2 'adm' passwd #匹配內容的行及向上兩行
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@lxy ~]# grep -C2 'adm' passwd #匹配內容的行及向上向下各兩行
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
[root@lxy ~]# grep '^root' passwd #匹配以什麼開頭的行
root:x:0:0:root:/root:/bin/bash
roott
rootooo
[root@lxy ~]# grep 't$' passwd #匹配以誰為結尾的行
halt:x:7:0:halt:/sbin:/sbin/halt
roott
ooroot
[root@lxy ~]# grep '.' passwd #匹配換行符以外的任意一個字元
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@lxy ~]# grep '\.$' passwd #取消特殊字元的含義
roottt.
[root@lxy ~]# grep '^$' passwd #表示空行,有空格的和tab鍵的空行不匹配
[root@lxy ~]# grep '.*' passwd #表示所有,包括空行