linux學習之grep egrep 命令及正則表達式

 正則表達式及grep使用方法

   

grep: Global search REgular expression and Print out the line.

 文本搜索工具,根據用戶指定的“模式(pattern)”對目標文本進行過濾,顯示被模式匹配到的行。

 grep [OPTION]... 'PATTERN' FILE...
  --color

 正則表達式:由一類字符書寫的模式,其中有些字符不表示字符的字面意義,而是表示控制或通配的功能;
  元字符:

  兩類:
   基本正則表達式
   擴展正則表達式

 基本正則表達式:
  字符匹配:
    .: 匹配任意單個字符
   []:匹配指定集合中的任意單個字符
      [[:digit:]], [0-9]
      [[:lower:]], [a-z]
      [[:upper:]], [A-Z]
      [[:alpha:]], [a-zA-Z]
      [[:alnum:]], [0-9a-zA-Z]
      [[:space:]],空白字符
      [[:punct:]],標點符號
   [^]:匹配指定集合外的任意單個字符
  匹配次數:用於對其前面緊鄰的字符所能夠出現的次數作出限定
   *: 匹配其前面的字符任意次,0,1或多次;
    例如:grep 'x*y'
     xy, xxy, xxxy, y
   \?:匹配其前面的字符0次或1次;
    例如:grep 'x\?y'
     xy, xxy, y, xxxxxy, aby
   \+: 匹配其前面的字符出現至少1次;
   \{m\}: 匹配其前面的字符m次;
    例如:grep 'x\{2\}y'
     xy, xxy, y, xxxxxy, aby
   \{m,n\}:匹配其前面的字符至少m次,至多n次;
    例如: grep 'x\{2,4\}y'
      xy, xxy, y, xxxxxxy, aby
       grep 'x\{0,4\}y'
        xy, xxy, y, xxxxxxxxxy, aby
       grep 'x\{2,\}y'
        xy, xxy, y, xxxxxy
   .*: 匹配任意長度的任意字符
  位置錨定:
   ^: 行首錨定
    寫在模式的最左側
   $: 行尾錨定
    寫在模式的最右側
   ^$: 空白行

   \<: 詞首錨定, 或\b
    出現在要查找的單詞模式的左側;\<char
   \>:詞尾錨定, 或\b
    出現在要查找的單詞模式的右側;char\>
   \<pattern\>: 匹配單詞
  分組: \(\)同時匹配多個字符

        例如:'ab\{1,3\}x'  可以匹配abx  abbx   abbbx

                 '\(ab\)\{1,3\}x' 可以匹配abx  ababx  abababx

   後向引用:模式中,如果使用\(\)實現了分組,在某行文本的檢查中,如果\(\)的模式匹配到了某內容,此內容後面的模式中可以被引用;
    \1, \2, \3
    模式自左而右,引用第#個左括號以及與其匹配右括號之間的模式匹配到的內容;

 grep選項:
  -v: 反向選取
  -o: 僅顯示匹配到內容
  -i: 忽略字符大小寫
  -E: 使用擴展正則表達式
  -A #: 匹配到的行向下多顯示#行
  -B #:匹配到的行向下多顯示#行
  -C #:匹配到的行向上向下多顯示#行

 

擴展正則表達式:
        和基本正則表達式大同小異,一般在匹配時無需加轉義符\,只有幾個特定的需要加轉義\
        *,?,+,{m},{m,n},^,$,\<,\>,\1,\2
        條件選擇:a|b

 

 


練習:

1、顯示/proc/meminfo文件中以大寫或小寫S開頭的行;

wKiom1RyBO7hLvYoAAEmGSdzako520.jpg

 

2、顯示/etc/passwd文件中其默認shell爲非/sbin/nologin的用戶

wKioL1RyBWyBVa6OAAG4wUWzZOY635.jpg

3、顯示/etc/passwd文件中其默認shell爲/bin/bash的用戶;
    並上述結果中其ID號最大的用戶;  

wKiom1RyBO-QRfjuAAGdvGiMB_g193.jpg

4,找出當前系統上其用戶名和默認shell相同的用戶

 

wKioL1RyBW6gyoowAAENihiIgQE185.jpg

 

5,找出/etc/passwd文件中的一位數或兩位數;

wKiom1RyBPLhrb48AAMXu-qfGas665.jpg

 

6,顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;

wKioL1RyBXHyEfzkAAEWJ9RV0Ck234.jpg

 

 7,顯示/etc/rc.d/rc.sysinit文件中,以#開頭,後面跟至少一個空白字符,而後又有至少一個非空白字符的行;

wKioL1RyBXSzbggoAAJUCnGNXkI650.jpg


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章