Linux--shell grep與正則表達式--04


一、grep程序

Linux下有文本處理三劍客:grep、sed、awk

grep:文本 行過濾工具

sed:文本 行編輯器(流編輯器)

awk:報告生成器(做文本輸出格式化)

1、grep

  grep包含三個命令:grep、egrep、fgrep,他們是用來進行 行模式(patten)匹配的

    egrep == grep -E

    fgrep == fast grep

    grep默認使用正則表達式進行文本匹配

2、grep的用法

  grep [option]… PATTEN [filename]

3、grep的常見選項

  -E 支持使用擴展的正則表達式(regexp)

  -P 使用perl語言的正則表達式引擎進行搜索(每一種語言的正則表達式引擎都不相同,甚至sed grep awk 使用的regexp引擎也不相同)

  -i 忽略大小寫

  -v 進行反選

  -o 僅僅輸出匹配的內容(默認輸出匹配到的行

  --color=auto 語法着色

  -n 顯示行號

  -w 匹配固定的單詞

4、PATTEN—正則表達式

  作用:通過一些特殊字符,來表示一類字符內容,交給前面的命令來執行;如果使用特殊字符本身含義就需要使用 \ 進行轉義

  a) 文件通配符: *   ?    [ ]    [^ ]

  b) 字符匹配:

    .  任意一個字符

    [ ]  范圍內的任意一個字符

    [^ ] 范圍外的任意一個字符

    字符類:

      [:alnum:] 字母+數字

      [:alpha:] 字母

      [:upper:] 大寫字母

      [:lower:] 小寫字母

      [:digit:] 數字

      [:punct:] 表示特殊字符

      [:space:] 空格    ^[[:space:]]*$ 有空格鍵的空行

  c) 次數匹配

    *  匹配前一個字符0次到多次 .*表示任意長度的任意字符

    \?  匹配前一個字符0次到1次

    \+  匹配前一個字符1次到n次

    \{m\} 匹配前一個字符m次   a\{7\} == aaaaaaa

    \{m,n\} 匹配前一個字符m到n次

    \{0,n\} 匹配前一個字符0到n次

    \{m,\} 匹配前一個字符至少m次

  d) 位置錨定

    ^  錨定行首

    $  錨定行尾

    \b  錨定詞首和錨定詞尾

    \>  錨定詞尾

    \<  錨定詞首

  e) 分組   分組的特性:默認情況下,Linux系統會為分組指定變量,變量的表示形式為\1 \2 \3 …

    \(\)     實例: \(abc\) 把abc看成一個整體匹配

練習:

1、顯示/proc/meminfo文件中大小s開頭的行

grep -i "^s" /proc/meminfo

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

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

3、顯示/etc/passwd文件中UID號最大的用戶的用戶名

sort -n -t: -k3 /etc/passwd | tail -1 | cut -d: -f1

4、如果用戶root存在,顯示其默認的shell程序

grep "^root\>" /etc/passwd &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7 
id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7 

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

grep "[0-9]\{2,3\}" /etc/passwd

6、顯示/etc/rc.d/rc.sysinit文件中,至少以一個空白字符開頭的且后面為非空白字符的行

grep "^[[:space:]]\+.*[^[:space:]]$" /etc/rc.d/rc.sysinit

7、找出”netstat -tan”命令的結果中,以“LISTEN”后跟0、1或多個空白字符結尾的行

netstat -tan | grep "LISTEN[[:space:]]*$"

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

useradd bash /bin/bash
useradd testbash
useradd basher
useradd -s /sbin/nologin nologin
grep "\(^[[:alnum:]]\+\>\).*\1$" /etc/passwd


免責聲明!

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



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