grep與正則表達式


一、grep程序

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

  grep:文本 行過濾工具

  sed : 文本行編輯器(流編輯器),改文件一般用sed

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

2、Grep

包含三個命令:它們是用來進行行匹配(pattern)匹配的

(1)grep的分類

       grep

                 egrep = grep -E /使用擴展的正則表達式進行匹配

                 fgrep = fast grep //只使用文件通配符進行匹配

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

  (2)grep的用法

                 grep [option] … PATTERN [filename]

  (3) grep的常見選項

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

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

                  -i  忽略大小寫

                  -v  進行反選             

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

                  --color=auto 語法着色

                  -n  顯示行號

二、PATTERN—正則表達式

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

1、 字符匹配

  .  代表任意一個字符 ?

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

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

  [0-9] [:digit:] [:alnum:][:alpha:][:upper:][:space:][:punct:]

2、 次數匹配

  * 匹配前面的字符0到無數次

  ? 匹配前面的字符0到1次

  + 匹配前面的字符1到n次

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

  \{m,n\} 匹配前面的字符m到n次

  \{m,\} 匹配至少m次

    示例:[abc] + abbbbcccc

               a\{7\}  匹配a7次,即aaaaaaa

               \{0,n\} 匹配前面的字符0次到n次 【0次要不要】

3、 位置錨定

  ^  錨定行首

  $  錨定行尾

  \b 錨定詞首和錨定詞尾

  \> 錨定詞尾

  <\ 錨定詞首

    示例:<\root\>  //錨定單個單詞

4、 分組

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

abc* ->abcccccc   此時我們需要把abc看成一個整體

\(\) 

示例:\(abc\)* -> abcabcabc

   \(ab+\(xy\)*\),其中\1=ab+\(xy\)*,\2=xy

三、練習

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

  useradd testbash

  useradd basher

  useradd -s /sbin/nologin nologin

  grep "\(^[[:alnum:]]\+\>\).*\1$" /etc/passwd

 


免責聲明!

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



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