1. 程式人生 > >【unix學習】檔案處理3—正則表示式和grep命令

【unix學習】檔案處理3—正則表示式和grep命令

unix檔案處理—正則表示式和grep命令

正則表示式

  1. 使用\{\}匹配模式結果出現的次數
    pattern\{n\} 用來匹配前面pattern出現次數。n為次數
    pattern\{n,\}m 含義同上,但次數最少為n
    pattern\{n,m\} 含義同上,但pattern出現次數在n與m之間,n , m為0-255中任意整數
    簡單的例子:
    匹配字母A出現兩次,並以B結尾,操作如下:
    A\{2\}B
    匹配值為AAB
    匹配A至少4次,使用:
    A\{4,\}B
    可以得結果AAAAB或AAAAAAAB,但不能為AAAB。
    如給出出現次數範圍,例如A出現2次到4次之間:
    A\{2,4\}B
    則結果為AAB、AAAB、AAAAB,而不是AB或AAAAAB等。
  2. 複雜的例子:前4個字元是數字,接下來是xx,最後4個也是數字,操作如下:
    [0-9]\{4\}xx[0-9]\{4\}
  3. 一些正則表示式的綜合例子:
    ^the 以the開頭行
    [mayMAY] 對包含may大寫或小寫字母的行
    ^ USER$ 只包含USER的行
    \. 帶句點的行
    ^d..x..x..x 對使用者、使用者組及其他使用者組成員有可執行許可權的目錄
    [ ^ $ ] 對空行
    [^0-9\$] 對非數字或美元標識
    [^0-9A-Za-z] 對非數字或字母
    [0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\} 對日期格式dd-mm-yyyy
    [0-9]\{3}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} 對IP地址格式nnn. nnn.nnn.nnn
  4. 匹配空行並顯示對應的行號
    grep -n “^$” /etc/files

grep命令

Purpose

Search the files for the given pattern, string, or expression

format

grep [options] pattern [file-list]

Options

i Ignore the case of letters
n Print line numbers along with matched lines
v Print nonmatching lines
c Print the number of matching lines only
w Search for the given pattern as a string
l Print only the names of files with matching lines

格式:

grep [OPTIONS] PATTERN [FILE…]
grep常用選項:
-c 只輸出匹配行的計數。
-i 不區分大小寫(只適用於單字元)。
-h 查詢多檔案時不顯示檔名。
-l 查詢多檔案時只輸出包含匹配字元的檔名。
-n 顯示匹配行及行號。
-v 顯示不包含匹配文字的所有行。
-w 匹配單詞

例項

  1. 匹配CS單詞
[s14516@gdufs]$grep -w CS /tmp/student_record
[s14516@gdufs]$grep [^E]CS /tmp/student_record
  1. 匹配CS結果的行數
[s14516@gdufs]$grep -c -w CS /tmp/student_record
  1. 顯示出現的行號
[s14516@gdufs]$grep -n -w CS /tmp/student_record

3:Al    Davis   CS      2.63
  1. 包含某個單詞的檔案
    -l
[s14516@gdufs]$grep -l 'John' /tmp/*
/tmp/back.tar
/tmp/backup1.tar
/tmp/backup.tar
/tmp/donors
/tmp/paper.tar
/tmp/student_record
  1. 忽略大小寫
    -i
[s14516@gdufs]$grep -n -i -w CS /tmp/student_record
  1. 查詢不匹配某個單詞的行
    -v
[s14516@gdufs]$grep -v -i -w CS /tmp/student_record
  1. 查詢多個檔案
    如果要在當前目錄下所有.doc檔案中查詢字串“sort”,方法如下:
grep "sort" *.doc

或在所有檔案中查詢單詞“sort it”

grep "sort it" *
  1. 行匹配的計數
grep -c "root" /etc/passwd
  1. 顯示滿足匹配模式的所有行及行號
grep -n root /etc/passwd
  1. 顯示非匹配行
    grep -v “#” /etc/inittab

grep和正則表示式

  1. 模式範圍
grep "50[12]" /etc/passwd
  1. 匹配任意字元
grep "x..x" /etc/passwd
grep "x[a-z][a-z]x" /etc/passwd
  1. 模式出現機率
grep "0\{2,\}" /etc/passwd
  1. 或的正則表達,需要用egrep 命令,不支援grep
[s14516@gdufs]$egrep -w '\<CS|IBM' /tmp/student_record
  1. 檢視系統中的使用者但不包括root
who | grep -v ^root