在linux/unix下,咱們是怎麼使用grep命令的呢?什麼是grep呢?咱們能用grep命令來幹些什麼呢?下面咱們來分析:
grep命令是在文件中全局查找指定的正則表達式,而且打印全部包含該表達式的行。egrep命令是擴展的grep,支持更多的正則表達式元字符。自由軟件基金會提供了grep的免費版本,稱做GNU grep,在linux系統上默認安裝就是這個免費版本。
grep命令參數 html
grep 'word' 文件名 grep 'word' 文件1 文件2 文件3 ...文件N grep ‘字符串1 字符串2’ 文件名 cat 文件名| grep 」字符串「 命令 | grep "字符串" grep --color "字符串" 文件名
如何使用grep命令去搜索某個文件中的內容呢?
查找 /etc/passwd 文件中是否存在user1這個用戶,能夠使用下面的命令: linux
[root@devops ~]# grep user1 /etc/passwd user1:x:501:501::/home/user1:/bin/bash [root@devops ~]#
若是想忽略大小寫去查找好比:User1,USER1或者其它的組合,能夠使用-i選項 正則表達式
[root@devops ~]# grep -i user1 /etc/passwd user1:x:501:501::/home/user1:/bin/bash USER1:x:502:502::/home/USER1:/bin/bash [root@devops ~]#
grep 命令遞歸查找
你能夠遞歸去查找某個目錄下各級子目錄裏的匹配查找模式的行,使用-r 選項 shell
[root@devops ~]# grep -r user1 /etc | more /etc/group-:user1:x:501: /etc/shadow:user1:!!:16176:0:99999:7::: /etc/group:user1:x:501: /etc/passwd-:user1:x:501:501::/home/user1:/bin/bash /etc/gshadow-:user1:!:: /etc/shadow-:user1:!!:16176:0:99999:7::: /etc/passwd:user1:x:501:501::/home/user1:/bin/bash /etc/gshadow:user1:!:: /etc/postfix/virtual:# user1@virtual-alias.domain address1 [root@devops ~]#
使用grep去匹配某一個單詞
選項-w使grep命令只查找做爲一個詞,而不是詞的一部分去作匹配
舉例說明: express
[root@devops ~]# grep user1 /etc/passwd user1:x:501:501::/home/user1:/bin/bash user1add:x:503:503::/home/user1add:/bin/bash [root@devops ~]# grep -w 'user1' /etc/passwd user1:x:501:501::/home/user1:/bin/bash
在本例中可以匹配「user1"的模式有兩行,那麼當你只想匹配一個完整的user1這個單詞的時候,能夠使用-w選項。
使用grep命令去查找2個不一樣的詞 bash
[root@devops ~]# egrep -w "user1|USER1" /etc/passwd user1:x:501:501::/home/user1:/bin/bash USER1:x:502:502::/home/USER1:/bin/bash [root@devops ~]#
統計grep查找出來的行數
grep命令能夠使用-c選項來顯示出匹配到的行數 dom
[root@devops ~]# grep -c 'user1' /etc/passwd 2
使用-n 選項能夠顯示出查找到的行在文件中的行號 post
[root@devops ~]# grep -n 'user1' /etc/passwd 23:user1:x:501:501::/home/user1:/bin/bash 25:user1add:x:503:503::/home/user1add:/bin/bash
grep反向查找只顯示不匹配的行
你能夠使用-v 選項來顯示不匹配的行,例如: ui
[root@devops ~]# grep -v user1 /etc/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
linux 管道符和grep命令的搭配使用
grep命令常常會和linux或unix管道符搭配使用,如顯示硬盤設備的名字: unix
[root@devops ~]# dmesg | egrep '(s|h)d[a-z]' NMI watchdog disabled (cpu0): hardware events not enabled sd 2:0:0:0: [sda] 41943040 512-byte logical blocks: (21.4 GB/20.0 GiB) sd 2:0:0:0: [sda] Write Protect is off sd 2:0:0:0: [sda] Mode Sense: 61 00 00 00 sd 2:0:0:0: [sda] Cache data unavailable sd 2:0:0:0: [sda] Assuming drive cache: write through sd 2:0:0:0: [sda] Cache data unavailable sd 2:0:0:0: [sda] Assuming drive cache: write through sda: sda1 sda2 sd 2:0:0:0: [sda] Cache data unavailable sd 2:0:0:0: [sda] Assuming drive cache: write through sd 2:0:0:0: [sda] Attached SCSI disk dracut: Scanning devices sda2 for LVM logical volumes vg_devops/lv_root vg_devops/lv_swap EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: SELinux: initialized (dev sda1, type ext4), uses xattr
顯示cpu模塊名字:
[root@devops ~]# cat /proc/cpuinfo | grep -i 'Model' model : 42 model name : Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz [root@devops ~]#
如何只輸出包含模式的文件名,而不是輸出文本行
[root@devops ~]# grep -l 'user1' /etc/* /etc/group /etc/group- /etc/gshadow /etc/gshadow- /etc/passwd /etc/passwd- /etc/shadow /etc/shadow-