簡介:全局搜索正則表達式出來的行並打印 (Global search REgular expression and Print out the line),一種按照特定模式(pattern)的文本過濾工具git
模式:pattern,經過有正則表達式(refexp)特殊字符以及文本字符組成的條件來過濾正則表達式
正則表達式:refexp,有一些bash支持的特殊文本字符來表示特殊含義,若是特殊字符當本來字符匹配須要轉義shell
基本正則表達式: BREexpress
擴展正則表達式: EREbash
dom
–color 用特定的顏色高亮顯示模式中匹配的字符串,通常爲紅色 | |
---|---|
-v | 顯示不被模式PATTERN匹配的行 |
-o | 表示只顯示被模式匹配的字符,而不是整個行 |
-q | 靜默模式不輸出信息 |
-A | # after 顯示到匹配到的後 # 行 |
-B | # before 顯示到匹配的前 # 行 |
-C | # context 顯示匹配的先後各幾行 |
-E | 使用擴展正則表達式 |
基本和擴展的功能相似,只是轉義方式不一樣
1.字符匹配ide
字符 | 字符說明 |
---|---|
. | 任意單個字符 |
? | 匹配其前單個字符0或1次 |
* | 匹配其前單個字符任意次 |
.* | 匹配任意長度的任意字符 |
[] | 表示匹配[]裏的字符集,[ab]及包含a或b的字符 |
[^] | 表示匹配除了[]裏的其它任意字符,[^ab]及不包含a或b的字符 |
2.[]裏所支持的特殊通配符:工具
字符 | 說明 |
---|---|
[0-9] | 表示單個0到9的數字 |
[:digit:] | 表示全部數值,同上 |
[a-z] [:lower:] | 表示單個小寫字母 |
[A-Z] [:upper:] | 表示單個大寫字母 |
[:alpha:] [a-zA-Z] | 表示單個字母 |
[:alnum:] | 表示字母或數字 |
[:space:] | 匹配空格 |
[:punct:] | 表示全部標點符合 |
注意:在使用中,[::]這種格式[::]裏帶特殊單詞的須要再加[]來表示,好比匹配空格則爲'[[:space:]]'
3.次數匹配spa
字符 | 說明 |
---|---|
\? | 0次或1次 |
\+ | 匹配其前字符一次以上 |
\{m\} | 匹配其前字符m次 |
\{m,\} | 匹配其前字符至少m次 |
\{m,n\} | 匹配其前字符至少m次,至多n次 |
4.字符錨定orm
字符 | 說明 |
---|---|
^ | 行首錨定 |
$ | 行尾錨定 |
^$ | 表示空行匹配 |
\< 或 \b | 行首錨定 |
\> 或 \b | 行尾錨定 |
\\> | 錨定匹配PATTERN的做爲單詞 \ \broot\b\> |
\(\) : | 對()裏匹配PATTERN的作分組\1爲後項引用前面第一個分組 |
1.用法
grep -E 'PATTERN' [file]
egrep 'PATTERN' [file]
字符匹配和基本相同
錨定和基本用法同樣
分組直接使用(),不要用\轉義
後項引用 \1 \2 \3
2.次數匹配
字符 | 說明 |
---|---|
* | 匹配前面字符任意次 |
? | 0或1次。>=0 |
+ | 1次以上。>=1 |
{m} | 匹配多少次 |
{m,} | 至少m次 |
{m,n} | 至少m次,至多n次 |
{0,n} | 至多n次 |
一、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式)
grep -i '^s' /proc/meminfo grep '^[Ss]' /proc/meminfo grep -E '^(s|S)' /proc/meminfo
二、顯示/etc/passwd文件中不以/bin/bash結尾的行
grep -v '/bin/bash$' /etc/passwd
三、顯示用戶rpc默認的shell程序
grep '^\<rpc\>' /etc/passwd | cut -d: -f7
四、找出/etc/passwd中的兩位或三位數
grep '\<[0-9][0-9]\?\>' /etc/passwd grep '\<[0-9]\{2,3\}\>' /etc/passwd
五、顯示/etc/grub2.cfg文件中,至少以一個空白字符開頭的且後面存非空白字符的行
grep '^[[:space:]]\+.*[^[:space:]]' /etc/grub2.cfg
六、找出"netstat -tan"命令的結果中以'LISTEN'後跟任意個空白字符結尾的行
netstat -tan '.*LISTEN[[:space:]]*$'
七、添加用戶bash、testbash、basher以及nologin(其shell爲/sbin/nologin),然後找出/etc/passwd文件中用戶名同shell名的行
grep '^\<\(.*\)\>.*/\1$' /etc/passwd grep '^\<\(.*\)\>.*\<\1\>$' /etc/passwd
八、顯示當前系統root、mage或wang用戶的UID和默認shell
grep -E '^(root|mage|wang)\>' /etc/passwd |cut -d: -f7
九、找出/etc/rc.d/init.d/functions文件中行首爲某單詞(包括下劃線)後面跟一個小括號的行
grep -E -o '^\<[[:alnum:]_]+\>\(\)' /etc/rc.d/init.d/functins
十、使用egrep取出/etc/rc.d/init.d/functions中其基名
echo "/etc/rc.d/init.d/functions" grep -E -o '[^/]+/?$'
十一、使用egrep取出上面路徑的目錄名
echo "/etc/rc.d/init.d/functions" | grep -E '/.*/'
十二、統計以root身份登陸的每一個遠程主機IP地址的登陸次數
last | grep -o 'root\>.*\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]' | tr -s ' '| cut -d' ' -f3 | uniq -c
1三、利用擴展正則表達式分別表示0-九、10-9九、100-19九、200-24九、250-255
grep -E '\<([0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>'
1四、顯示ifconfig命令結果中全部IPv4地址
ifconfig | grep -o '\(\([0-9]\|1[0-9]\|1[0-9]{2}\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\([0-9]\|1[0-9]\|1[0-9]{2}\|2[0-4][0-9]\|25[0-5]\)'