Shell grep命令詳解:提取符合條件的字串行

2020-07-16 10:04:35
本節講一下行提取命令 grep。grep 的作用是在檔案中提取和匹配符合條件的字串行。命令格式如下:

[[email protected] ~]# grep [選項] "搜尋內容" 檔名

選項:
  • -A 數位:列出符合條件的行,並列出後續的 n 行;
  • -B 數位:列出符合條件的行,並列出前面的 n 行;
  • -c:統計找到的符合條件的字串的次數;
  • -i:忽略大小寫;
  • -n:輸出行號;
  • -v:反向査找;
  • --color=auto:搜尋出的關鍵字用顏色顯示;

舉幾個例子:

[[email protected] ~]# grep "/bin/bash" /etc/passwd
#查詢使用者資訊檔案/etc/passwd中有多少可以登入的使用者
root:x:0:0:root:/root:/bin/bash
user1:x:500:500::/home/user1:/bin/bash
user2:x:501:501::/home/user2:/bin/bash

grep 是行提取命令,所以只要一行資料中包含"搜尋內容",就會列出整行的資料。在這個例子中,會在 /etc/passwd 檔案中列出所有包含"/bin/bash"的行,而我們已知只有可登入使用者的 Shell 才是"/bin/bash",而偽使用者的 Shell 是"/sbin/nologin",所以這條命令會列出當前系統中所有可以登入的使用者。

再舉幾個例子:

[[email protected] ~]# grep -A 3 "root" /etc/passwd
#查詢包含"root"的行,並列出後續的3行
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
[[email protected] ~]# grep -n "/bin/bash" /etc/passwd
#查詢可以登入的使用者,並顯示行號
1:root:x:0:0:root:/root:/bin/bash
31:user1:x:500:500::/home/user1:/bin/bash 32:user:x:501:501::/home/user:/bin/bash
[[email protected] ~]# grep -v "/bin/bash" /etc/passwd
#查詢不包含"/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
…省略部分輸出…