grep與正則表達式

1、grep程序git

一、Linux下有文本處理三劍客:grep sed awk正則表達式

  grep:文本 行過濾工具shell

  sed : 文本行編輯器(流編輯器),改文件通常用sedbash

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

二、Grep工具

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

(1)grep的分類regexp

       grepit

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

                 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  顯示行號

2、PATTERN—正則表達式

做用:經過一些特殊字符,來表示一類字符內容,而後交給前面的命令來執行;若是使用他特殊字符自己含義,就須要\進行轉義

一、 字符匹配

  .  表明任意一個字符 ?

  [ ] 表明範圍內的任意一個字符

  [^ ] 表明範圍外的任意一個字符

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

二、 次數匹配

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

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

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

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

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

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

    示例:[abc] + abbbbcccc

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

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

三、 位置錨定

  ^  錨定行首

  $  錨定行尾

  \b 錨定詞首和錨定詞尾

  \> 錨定詞尾

  <\ 錨定詞首

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

四、 分組

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

abc* ->abcccccc   此時咱們須要把abc當作一個總體

\(\) 

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

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

3、練習

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

  grep -i "^s" /proc/meminfo

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

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

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

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

四、若是用戶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

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

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

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

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

七、找出"netstat -tan"命令的結果中,以"LISTEN"後跟0、1或多個空白字符結尾的行

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

八、添加用戶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

相關文章
相關標籤/搜索