18.Linux grep/egrep命令詳解


 

grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹 配的行打印出來

grep搜索成功,則返回0,如果搜索不成功,則返回1,如果搜索的文件不存在,則返回2。

 

grep的規則表達式(正則一定要轉義)

 

^    #錨定行的開始 如:'^grep'匹配所有以grep開頭的行。    
$    #錨定行的結束 如:'grep$'匹配所有以grep結尾的行。 
.    #匹配一個非換行符的字符 如:'gr.p'匹配gr后接一個任意字符,然后是p。
*    #匹配零個或多個先前字符 如:'*grep'匹配所有一個或多個空格后緊跟grep的行。  
.*   #一起用代表任意字符。   
[]   #匹配一個指定范圍內的字符,如'[Gg]rep'匹配Grep和grep。    
[^]  #匹配一個不在指定范圍內的字符
\(..\)  #標記匹配字符,如'\(love\)',love被標記為1。    
\<      #錨定單詞的開始,如:'\<grep'匹配包含以grep開頭的單詞的行。    
\>      #錨定單詞的結束,如'grep\>'匹配包含以grep結尾的單詞的行。    
x\{m\}  #重復字符x,m次,如:'0\{5\}'匹配包含5個o的行。    
x\{m,\} #重復字符x,至少m次,如:'o\{5,\}'匹配至少有5個o的行。    
x\{m,n\}#重復字符x,至少m次,不多於n次,如:'o\{5,10\}'匹配5--10個o的行。   
\w    #匹配文字和數字字符,也就是[A-Za-z0-9],
\W    #\w的反置形式,匹配一個或多個非單詞字符,如點號句號等。   
\b    #單詞鎖定符,如: '\bgrep\b'只匹配grep。 

 

grep常見命令參數

 

-n  打印行號
    grep -n ".*" h.txt        所有打印行號
    grep -n "root" h.txt    匹配的內容顯示行號
-v  不包括
-E  表示過濾 多個參數
    grep -Ev "sshd|network|crond|sysstat|"
-o:僅打印你需要的東西,默認打印正行
     grep -o "hello" h.txt
-i:忽略大小寫
    grep -i "hello" h.txt
-c: 用於統計文中出現的次數
--color=auto  過濾字段添加顏色
    利用正則打印特定字符
\b:作為邊界符,邊界只包含特定字符的行
    grep "\boldboy\b" /etc/passwd   -->只過濾包含oldboy的行

 

或者:

OPTIONS:
    -i: 不區分大小寫
    -v: 查找不包含指定內容的行,反向選擇
    -w: 按單詞搜索
    -o: 打印匹配關鍵字
    -c: 統計匹配到的行數
    -n: 顯示行號
    -r: 逐層遍歷目錄查找
    -A: 顯示匹配行及后面多少行    
    -B: 顯示匹配行及前面多少行
    -C: 顯示匹配行前后多少行
    -l:只列出匹配的文件名
    -L:列出不匹配的文件名
    -e: 使用正則匹配
    -E:使用擴展正則匹配
    ^key:以關鍵字開頭
    key$:以關鍵字結尾
    ^$:匹配空行
    --color=auto :可以將找到的關鍵詞部分加上顏色的顯示

 

顏色顯示(別名設置):

 

臨時設置:
# alias grep='grep --color=auto' //只針對當前終端和當前用戶生效  永久設置: 1)全局(針對所有用戶生效) vim /etc/bashrc alias grep='grep --color=auto' source /etc/bashrc 2)局部(針對具體的某個用戶) vim ~/.bashrc alias grep='grep --color=auto' source ~/.bashrc

 

 

Linux egrep命令詳解

 

egrep: == grep -E 用於顯示文件中符合條件的字符
          env|egrep "USER|MAIL|PWD|LOGNAME"
          用的表達式不一樣 ,egerp更加規范
egrep -o "oldboy|hello" h.txt   -->僅僅輸出 oldboy 和 hello

 

 

常用的命令展示

 

查找指定關鍵字個數

 

grep '\bboot\b' logs_bak.txt 【\b單詞鎖定符,只匹配boot】

 

輸出logs_bak.txt 文件中含有從logs.txt文件中讀取出的關鍵詞的內容行

 

cat logs_bak.txt 
    cat logs.txt 
    cat logs.txt | grep -nf logs_bak.txt

 

如圖:

 

 

從多個文件中查找關鍵詞

 

grep "omc" /etc/passwd /etc/shadow 【多文件查詢時,會用冒號前添加文件名】

 

如圖:

 

 

打印IP信息

ifconfig eth0|grep -E "([0-9]{1,3}\.){3}" 【-E 表達式匹配,用小括號括起來表示一個整體】

 

如圖:

 

 

 

同時過濾多個關鍵字

cat /etc/passwd|grep -E "boy|omc"
   ==> cat /etc/passwd|egrep "omc|boy" 【用 | 划分多個關鍵字】

 

如圖:

 

 

顯示當前目錄下面以.txt 結尾的文件中的所有包含每個字符串至少有7個連續小寫字符的字符串的行

grep '\w\{7\}' *.txt
   ==> grep '[a-z]\{7\}' *.txt 【注意特殊字符的轉義】

 

如圖:

 

 

上下文的控制(了解)          

 

# A   查詢匹配內容的一行之外,后n行的顯示
    # B   查詢匹配內容的一行之外,前n行的顯示
    # C   查詢匹配內容的一行之外,顯示上下n行
grep -n 'yum' -A 3 logs_bak.txt

 

如圖:

 

 

 

舉例說明:

說明:不要直接使用/etc/passwd文件,將其拷貝到/tmp下做實驗!

# grep -i root passwd                        忽略大小寫匹配包含root的行
# grep -w ftp passwd 精確匹配ftp單詞 # grep -w hello passwd 精確匹配hello單詞;自己添加包含hello的行到文件 # grep -wo ftp passwd 打印匹配到的關鍵字ftp # grep -n root passwd 打印匹配到root關鍵字的行好 # grep -ni root passwd 忽略大小寫匹配統計包含關鍵字root的行 # grep -nic root passwd 忽略大小寫匹配統計包含關鍵字root的行數 # grep -i ^root passwd 忽略大小寫匹配以root開頭的行 # grep bash$ passwd 匹配以bash結尾的行 # grep -n ^$ passwd 匹配空行並打印行號 # grep ^# /etc/vsftpd/vsftpd.conf 匹配以#號開頭的行 # grep -v ^# /etc/vsftpd/vsftpd.conf 匹配不以#號開頭的行 # grep -A 5 mail passwd 匹配包含mail關鍵字及其后5行 # grep -B 5 mail passwd 匹配包含mail關鍵字及其前5行 # grep -C 5 mail passwd 匹配包含mail關鍵字及其前后5行

 

 

 

參考:

https://www.cnblogs.com/ftl1012/p/grep.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM