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 14:45
下一篇 2016-08-12 14:45

相關推薦

  • Hadoop新增datanode與SecondaryNameNode

    無論是新增namenode還是SecondaryNameNode,操作方法大致相同 一、如果新增datanode,需要保證namenode能無密碼ssh連接到新datanode 如果是添加SecondaryNameNode,則需保證其能無密碼ssh連接至各datanode和namenode,namenode也需要能無密碼連接到新SecondaryNameNo…

    Linux干貨 2015-03-08
  • 文件查找find和locate

            在Linux這個一切皆文件的系統中怎么能快速和精確的查找到文件,是我們必不可少的技能。而文件查找的命令可以讓我們在很短的時間內在文件系統中找到我們要查找的文件。這就是我們要掌握的,因此我來介紹一下文件查找的這兩個命令locate和find。 文件查找:在文件系統上…

    Linux干貨 2016-08-24
  • 沒有自動ip解決辦法

    用虛擬機下載好centos6.9后,本來想查看ip地址,結果發現沒有自動獲取ip地址,在網上找了很多方法都不行,問題如下: 用命令ifconfig查看ip地址,發現沒有,如下 查看eth0如下 解決辦法如下: 1、關閉NetworkManager服務 2、關閉NetworkManager開機啟動 3、添加 /etc/sysconfig/network-scr…

    2017-07-16
  • linux 故障—-/boot刪除 修復

    LINUX        /BOOT        SHANCHU 光盤進入resuce  第①步;修復內核文件 shell start shell 首先先切根 chroot &n…

    Linux干貨 2016-09-13
  • linux文件系統上的權限

    文件系統上的權限是指文件系統上的文件和目錄的權限,主要針對三類對象進行的(訪問者)進行的定義: 針對文件來說 r 使用工具cat nano去看文件里面內容的權限 w 可以修改文件的內容 x 二進制程序以及腳本需要發起系統調用,去啟動為一個進程 針對目錄來說 r 是否可以查看目錄里面的內容 有r權限的話 可以使用ls -l w 對目錄里面是否可以創建文件或者目…

    Linux干貨 2017-04-01
  • Linux系統啟動流程初識

    centos系統啟動流程 本篇僅僅講解centos5和6 centos7并不適用 Linux系統的組成部分:內核+根文件系統 內核功能: 進程管理 內存管理 網絡管理 驅動程序 文件系統 安全功能 有以下目錄結構的文件系統可以被識別為根文件系統,但根文件系統本身不存在 rootfs:/bin/ /sbin /etc/ /sys/…

    Linux干貨 2016-09-11
欧美性久久久久