Linux三劍客之grep

grep(Globel Search Regular Expression and Printing out the line)全面搜索正則表達式并把行打印出來)是一個強大的文本搜索工具,使用正則表達式搜索文本的文本,并把結果打印出來。Unix家族包括grep、egrep和fgrep。egrep是擴張的正則表達式它支持更多的字符,fgrep是fast grep它不支持元字符搜索,但搜索速度更快。grep搜索結果不影響原文件。


grep命令

全面搜索正則表達式并把行打印出來

常用語法grep [OPTIONS] PATTERN [FILE…]

命令  選項    模式   文件

PATTERN 模式 是由正則表達式的元字符和普通字符所指定的過濾條件。

常用選項

-A NUM, –after-context=NUM#顯示匹配行的后NUM行

-B NUM, –before-context=NUM#顯示匹配行的前NUM行

-C NUM, -NUM, –context=NUM#顯示匹配行的前后NUM行

-E, –extended-regexp#擴張的正則表達式-n, 

–line-number#顯示匹配的行號

-q, –quiet, –silent#靜默模式,不做任何輸出

-o, –only-matching #只顯示匹配到的行

–color[=WHEN], –colour[=WHEN]#匹配高亮顯示,cent6.#默認沒啟用

-c, –count #統計匹配的行數-i, 

–ignore-case #忽略大小寫

-v, –invert-match#顯示不能夠被pattern到的行 (取反)

-w, –word-regexp#單詞匹配而不是字符


在使用grep前先了解了解正則表達式。正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。

正則表達式的元字符可以做

字符匹配   匹配次數 位置錨定 分組

正則表達式使用的是貪婪模式,能匹配多長就盡量匹配多長

grep不加引號直接過濾字符串;grep在進行模式匹配的時候必須加引號,單引和雙引號都可以;grep在引用變量的時候必須加雙引號

如果要匹配特殊字符的話要使用\轉義來匹配特殊字符  如\$ \@等

字符匹配

. 匹配任意單個字符

[]匹配括號能指定的字符

[^]匹配括號外的指定字符

[alpha]:匹配所有字符

[:alnum:] 除了換行符外的所有字符

[:punct:] 所有標點符號

[:space:] 空格和tab

[:digit:] [0-9] 匹配所有數字

[:lowwer:][a-z] 匹配所有小寫字符

[:upper:] [A-Z] 匹配所有的大寫字符

匹配次數

* 匹配前面字符0次、1次或多次

.* 匹配任意長度任意字符

\? 匹配前面字符0次或1次

\+ 匹配前面字符至少一次或以上多次

\{m\} 匹配前面字符m次

\m,n\} 匹配前面字符最少m次,最多n次

\{,n\} 匹配前面字符做多n次\

{m,\} 匹配前面字符最少m次

位置錨定

^ 行首錨定,用于模式的最左側

$ 行尾錨定,用于模式的最右側

^PATTERN$ 用于模式匹配整行

^$ 空行

^[[:space:]]*$ 空白行

\< 或\b:詞首錨定,用于單詞模式的左側

\> 或\b:詞尾錨定;用于單詞模式的右側\<PATTERN\>:匹配整個單詞

分組\(PATTERN\) 將一個或多個字符捆綁在一起,當作一個整體進行處理。引用第一個小括號的分組\1,第二個是\2,以此類推。

示例

test1.png

test 2.png

1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式)

 grep -i '^s' /proc/meminfo grep  '^[sS] /proc/meminfo

2、顯示/etc/passwd文件中不以/bin/bash結尾的行

 grep -v '/bin/bash$' /etc/passwd

3、顯示用戶rpc默認的shell程序

 grep '\<rpc\>' /etc/passwd|cut -d: -f7

4、找出/etc/passwd中的兩位或三位數

   grep '\<[1-9][0-9]\{1,2\}\>' /etc/passwd

5、顯示/etc/grub.conf文件中,至少以一個空白字符開頭的且后面存非空白字符的行

 grep '^[[:space:]]\+[^[:space:]]' /etc/grub.conf

6、找出"netstat -tan"命令的結果中以'LISTEN'后跟0、1或多個空白字符結尾的行

 netstat -tan|grep '\<LISTEN[[:space:]]*'

7、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin),而后找出/etc/passwd文件中用戶名同shell名的行

 grep '^\(.*\)\>.*\1$' /etc/passwd


egrep是擴展的正則表達式

即grep -E

常用語法grep [OPTIONS] PATTERN [FILE…]

命令  選項    模式   文件

egrep常用選項和字符匹配基本和grep就不多做解釋了

次數匹配:

*:匹配前面字符任意次

?: 0或1次

+:1次或多次

{m}:匹配m次

{m,n}:至少m,至多n次

位置錨定:

^ :行首錨定,用于行的最左側

$ :行尾錨定,用于行的左右側

\<, \b :詞首錨定。

\>, \b :詞尾錨定

?分組:

(pattern)  將一個或多個字符捆綁在一起,當作一個整體進行處理。引用第一個小括號的分組\1,第二個是\2,以此類推。

后向引用:\1, \2, …

或者:

a|b :a或b

C|cat: C或cat

(C|c)at:Cat或cat


示例

 1、顯示當前系統root、mage或wang用戶的UID和默認shell

   egrep '^root\>|^mage\>|^wang\>' /etc/passwd|cut -d: -f3,7

?2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行

   egrep '[[:alnum:]_]\(\)' /etc/rc.d/init.d/functions

?3、使用egrep取出/etc/rc.d/init.d/functions中其基名

   echo "/etc/rc.d/init.d/functions " |egrep -o '(.*/)+(.*)\1'

   

?4、使用egrep取出上面路徑的目錄名

   echo "/etc/rc.d/inittab/functions" |grep '[^/]\+/\?$'

?5、統計以root身份登錄的每個遠程主機IP地址的登錄次數

   last |egrep –color=auto  '^root\>.*(.*\.){3}[0-9]{3}\> '

|tr -s ' '|cut -d' ' -f3|sort |uniq -c

?6、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255

     

egrep '\<[0-9]\>' :0-9

egrep '\<[1-9][0-9]\>' :10-99

egrep \<1[0-9]{2}\>:100-199

egrep \<2[0-4][0-9]\> :200-249

egrep \<25[0-5]\>:250-255

?7、顯示ifconfig命令結果中所有IPv4地址

egrep '((2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)\.){3}(2[0-4][0-9]|25[0-4]|[01]?[0-9][0-9]?)'

原創文章,作者:ladsdm,如若轉載,請注明出處:http://www.www58058.com/33743

(0)
ladsdmladsdm
上一篇 2016-08-12
下一篇 2016-08-12

相關推薦

  • Redis 存儲分片之代理服務Twemproxy 測試

    概述 實際業務場景中單點 Redis 容量、并發都是有限的,所以有 Redis Cluster 的需求。 但是官方的 Redis Cluster 一再跳票,還不可用。 只好先使用最簡單的方式:Proxy。有很多可選,但在大范圍生產使用的, Twitter 開源的 Twemproxy  看起來是個理想的選擇 – https://…

    Linux干貨 2015-03-10
  • tomcat基礎-如何給Tomcat前端加反向代理服務器

    Tomcat可以做為反向代理服務器的組件有很多,例如使用nginx,如果使用nginx,Tomcat就只能使用http連接器,另外一種是apache。如果是使用httpd,Tomcat兩種連接器都能發揮作用,例如可以使用http連接器,也可以使用ajp連接器,

    Linux干貨 2018-03-19
  • 理解基本權限以及特殊權限:Suid 、Sgid、Sticky以及acl

    理解基本權限以及特殊權限:Suid 、Sgid、Sticky以及acl 在Linux中特殊權限是什么?為什么要設定特殊權限?回答這個問題前,我們不妨思考為什么要設定權限? 大家知道Linux中一切皆文件。不論你是什么,在linux系統中都會被當做一個文件來看待。無論你是文本或目錄,硬件或軟件,圖片或視頻等等,統統都被當做文件來看待。所以,在linux中,文件…

    Linux干貨 2017-04-08
  • N-22-南京-修 第三周博客作業

    #1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [xujie@localhost ~]$ who | cut -d " " -f1 | sort -u #2、取出最后登錄到當前系統的用戶的相關信息。 [root@localhost xujie]# last -x | head -1 #3、取出…

    Linux干貨 2016-09-15
  • linux初期了解

    計算機的組成及其功能 計算機有運算器,控制器,存儲器,輸出設備和輸入設備組成: 1.運算器:運算器又稱算術邏輯單元(Arithmetic Logic Unit簡稱ALU)。它是計算機對數據進行加工處理的部件,包括算術運算2.控制器:控制器負責從存儲器中取出指令,并對指令進行譯碼 3.存儲器:存儲器是計算機記憶或暫存數據的部件。 4.輸入設備:輸入設備是給計算…

    Linux干貨 2016-10-30
  • VimTutor(上)

    柚子翻譯,如有理解錯誤或翻譯錯誤,請指正! VimTutor Vim是一款強大的文本編輯器,擁有多命令的特性,tutor解釋了其中大多數命令。 tutor是為了描述足夠多的Vim命令幫助你輕松使用Vim而被制作的,使Vim能成為一個可完成你所有工作意圖的編輯器。 完成tutor的內容大概需要25-30分鐘,所完成時間取決于你通過時間積累的經驗。 注意: 1.…

    Linux干貨 2015-10-18
欧美性久久久久