grep

什麼是正則:

•正則就是一串有規律的字符串php

• 掌握好正則對於編寫shell腳本有很大幫助shell

• 各類編程語言中都有正則,原理是同樣的編程

• 本章將要學習grep/egrep、sed、awkcentos

grep:

centos7中grep自帶顏色別名,至關於centos6中的 ‘grep --color’:bash

[root@localhost grep]# which grepssh

alias grep='grep --color=auto'編程語言

/usr/bin/grep學習

•grep [-cinvABC] 'word' filenamecentos7

• -c 行數spa

[root@localhost ~]# grep -c 'root' /etc/passwd

2

• -i 不區分大小寫

• -n 顯示行號

• -v 取反

[root@localhost grep]# grep -v 'nologin' passwd 不顯示包含‘nologin’的行

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

gavin:x:1000:1000::/home/gavin:/bin/bash

zhang:x:1001:1001::/home/zhang:/bin/bash

user:x:1002:1002::/home/user:/bin/bash

• -r 遍歷全部子目錄

grep -r 'root' /etc/ 搜索/etc目錄下全部文檔,並過濾出包含root關鍵字的行

• -A 後面跟數字,過濾出符合要求的行以及下面n行

• -B 同上,過濾出符合要求的行以及上面n行

• -C 同上,同時過濾出符合要求的行以及上下各n行

grep/egrep示例:

• grep -n 'root' /etc/passwd

過濾出包含root的行,並顯示行號;

• grep -nv 'nologin' /etc/passwd

過濾出不包含nologin的行,並顯示行號

• 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

^在外面表示以什麼什麼開頭;^在中括號中表示非什麼什麼;

過濾出非字母開頭的行

• grep -v '[^0-9]' /etc/inittab

匹配包含非數字的行,只排除了全數字的行,其餘都會顯示;

• grep 'r.o' test.txt

.表示任意的一個字符;'r.o'表示3位字符,以r開頭o結尾,中間能夠是任意一個字符;

匹配以r開頭o結尾,中間能夠是任意一個字符的行

• grep 'oo*' test.txt

*表示*號的前一個字符能夠有0到n個,重複0次是o,1次是oo,2次是ooo

• grep '.*' test.txt

.*表示任意個任意字符,(全部的都會匹配)

• grep 'o\{2\}' /etc/passwd = grep -E 'o{2}' /etc/passwd = egrep 'o{2}' /etc/passwd

{}花括號在grep中不脫義僅表示搜索包含花括號的,脫義以後表示有2個花括號前面的字符;

• egrep 'o{2}' /etc/passwd

egrep(擴展的grep,包含特殊符號時不用脫義),{}裏的數字表示有多少個前面的字符

• egrep 'o+' /etc/passwd

+表示1個或多個+號前面的字符;(+號只對它前面的一個字符起做用,除非括號括起來的總體);

o oo ooo oooo ... 都會被匹配

• egrep 'oo?' /etc/passwd

? 表示0個或1個?號前面的字符

匹配 'o' 'oo'

• egrep 'root|nologin' /etc/passwd

|表示「或」

匹配包含root 或nologin的行

• egrep -v '^#|^$' /etc/ssh/sshd_config

列出非#開頭以及非空行

• egrep '(oo){2}' /etc/passwd

()表示括起來的是一個總體;

匹配oooo 的行

 

把一個目錄下,過濾全部*.php文檔中含有eval的行:

grep -r --include="*.php" 'eval' /data/

相關文章
相關標籤/搜索