grep命令

grep介紹

  • 正則就是一串有規律的字符串
  • 掌握好正則對於編寫shell腳本有很大幫助
  • 各類編程語言中都有正則,原理是同樣的
  • 本章將要學習grep/egrep、sed、awk

grep/egrep命令

  • grep命令:過濾出指定關鍵字的行;
  • 格式:grep [參數] ‘字符’ filename

  • grep -n 顯示符號要求的行,並顯示行號
  • grep -c 打印符合要求的行數
  • grep -v 打印不符合要求的行,取反的意思
  • grep -r 會把目錄下的全部文件所有遍歷;-r針對的是目錄,若是不加-r只能針對文件
  • grep -i 忽略大小寫
  • grep -A2 打印符合要求的行以及下面兩行
  • grep -B2 打印符合要求的行以及上面兩行
  • grep -C2 打印符合要求的行以及上下兩行
  • grep -w 匹配一個完整的單詞
  • grep -E 特殊符號脫意==egrep
  • centos7中自帶 --color顯示顏色 ;
  • grep 跟特殊符號的話,要用單引號
  • grep --include 包含
  • grep -l 只打印出含有匹配字符串的文件名,不輸出具體匹配行的數據

  1. 過濾出包含root字符的行。
[root@linux-128 ~]# grep 'root' test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
  1. grep –n 過濾出包含root的行,並顯示行號;
[root@linux-128 ~]# grep -n 'root' test.txt
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
  1. test.txt中包含root字符的一共有幾行。
[root@linux-128 ~]# grep -c 'root' test.txt
2
  1. 過濾出不包含nologin的行;
[root@linux-128 ~]# grep -v 'nologin' test.txt
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
wuzhou:x:1000:1000::/home/wuzhou:/bin/bash
user3:x:1004:1003::/home/user3:/sbin/nolongin
user4:x:1005:1003::/home/user4:/sbin/nolongin
user5:x:1007:1006::/home/user5:/bin/login
user7:x:1009:1009::/home/user7:/bin/bash
  1. grep –i 不區分大小寫
[root@linux-128 ~]# grep  -i 'biin' test.txt
root:x:0:0:root:/root:/biin/bash
Biin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sBiin/nologin
sync:x:5:0:sync:/sbin:/Biin/sync
shutdown:x:6:0:shutdown:/sbiin:/sbin/shutdown
[root@linux-128 ~]# grep   'biin' test.txt
root:x:0:0:root:/root:/biin/bash
shutdown:x:6:0:shutdown:/sbiin:/sbin/shutdown
  1. grep –A2 打印符合要求的行以及下面兩行;
[root@linux-128 ~]# grep -nA2 'root' test.txt
1:root:x:0:0:root:/root:/biin/bash
2-Biin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  1. grep –B2 打印符合要求的行以及上面兩行;
[root@linux-128 ~]# grep -nB2 'spool' test.txt
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
4-adm:x:3:4:adm:/var/adm:/sBiin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
--
7-shutdown:x:6:0:shutdown:/sbiin:/sbin/shutdown
8-halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
--
17-polkitd:x:998:996:User for polkitd:/:/sbin/nologin
18-tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
19:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
  1. grep –C2 打印符合要求的行以及這行上下各兩行;
[root@linux-128 ~]# grep -nC2 'halt' test.txt
6-sync:x:5:0:sync:/sbin:/Biin/sync
7-shutdown:x:6:0:shutdown:/sbiin:/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

grep/egrep示例1:

  • grep -n 'root' test.txt
  • grep -nv 'nologin' test.txt
  • grep '[0-9]'/etc/inittab
  • grep -v '[0-9]'/etc/inittab
  • grep -v '^#' /etc/inittab
  • grep -v '^#' /etc/inittab|grep -v '^$'
  • grep '^[^a-zA-Z]' test.txt

  • [0-9]:這裏的方括號,表示方括號裏面的任意一個字符;只要有一個數字,無論是幾,就算符合要求。
  1. 過濾出包含數字的行 ; grep '[0-9]' test1.txt
[root@linux-128 ~]# grep '[0-9]' test1.txt
root:x:0:0:root:/root:/biin/bash
123123
Biin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sBiin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
aaaa1111bbbb
11111111
sync:x:5:0:sync:/sbin:/Biin/sync
shutdown:x:6:0:shutdown:/sbiin:/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
  1. 過濾出全部不包含數字的行; grep -nv 'nologin' test.txt
[root@linux-128 ~]# grep -nv '[0-9]' test1.txt
8:BBBBBBB
11:asgfhavkhasd
  1. 過濾出不以#開頭的行,方便查看某個文件的配置
[root@linux-128 ~]# grep -nv '^#' 2.txt
10:dbadfasdfervadsv
13:123`123dv
15:123123123
16:
  1. 過濾出不以#或者開頭的行不包括空行
[root@linux-128 ~]# grep -v '^#' 2.txt |grep -v '^$'
dbadfasdfervadsv
123`123dv
123123123
  1. 過濾出不以字母開頭的行
grep '^[^a-zA-Z]' test.txt 
[root@linux-128 ~]# grep '^[^a-zA-Z]' test.txt
11111111111
!@@@@$$$$$$
111111a22222222
  1. 過濾出不包含特殊符號的行
grep -v '^[^a-zA-Z0-9]' 2.txt 
[root@linux-128 ~]# grep -v '^[^a-zA-Z0-9]' 2.txt
dbadfasdfervadsv
123`123dv
123123123

grep/egrep示例2:

  • grep 'r.o' test.txt
  • grep 'oo*' test.txt
  • grep '.*' test.txt
  • grep 'o{2}' /etc/passwd
  • egrep 'o{2}' /etc/passwd
  • egrep 'o+' /etc/passwd
  • egrep 'oo?' /etc/passwd
  • egrep 'root|nologin' /etc/passwd
  • egrep '(oo){2}' /etc/passwd

正則裏面的特殊符號

  • 1 . 表示 任意一個字符
  • 2 * 表示 零個或多個前面的字符
  • 3 .* 表示零個或多個任意字符,空行也包含在內;以r開頭o結尾。
  • 4 ? 表示0個或者1個前面的字符,使用的時候要\ 脫意一下
  • 5 + 表示一個或者多個+前面的字符
  • 6 | 在正則表達式裏面表示或者,能夠寫多個,是特殊符號,要使用脫意 或者-E 或者 egrep
  • 7 () 括號表示一個總體,{1,3}大括號表示一個範圍 ? +(){} |都是特殊符號,要使用必須脫意或者-E 或者egrep

  1. . 這個點表示任意一個字符 grep -n 'r.o' 1.txt
    輸入圖片說明linux

  2. 表示 零個或多個前面的字符 head -10 1.txt|grep -n 'ro'
    輸入圖片說明正則表達式

  3. .*表示零個或多個任意字符,空行也包含在內;以r開頭o結尾。 grep -n 'r.*o' 1.txt
    輸入圖片說明shell

  4. ?表示零個或者一個前面的字符;使用的時候要\ 或者-E,egrep脫意一下 head -10 1.txt|egrep 'r?o'
    輸入圖片說明編程

    • 表示一個或者多個+前面的字符;使用的時候要\ 或者-E,egrep脫意一下 head -10 1.txt|egrep 'r+o'
      輸入圖片說明
  5. | 在正則表達式裏面表示或者,能夠寫多個,是特殊符號,要使用脫意 或者-E 或者 egrep head -10 1.txt|egrep 'root|nologin'
    輸入圖片說明centos

  6. 想要表示而且的話 要過濾兩次 egrep 'root' 1.txt |egrep 'nologin'
    輸入圖片說明bash

  7. ()括號表示一個總體,{1,3}大括號表示一個範圍 ? +(){} |都是特殊符號,要使用必須脫意或者-E 或者egrep egrep '(oo){2}' 1.txt
    輸入圖片說明編程語言

相關文章
相關標籤/搜索