Linux入門之文本處理三劍客之grep

Linux入門之文本處理三劍客之grep

 文本處理工具:

 grep,sed(流編輯器),awk

 

 grep簡述及特點

簡介:全局搜索正則表達式出來的行并打印 (Global search REgular expression and Print out  the line),一種按照特定模式(pattern)的文本過濾工具

模式:pattern,通過有正則表達式(refexp)特殊字符以及文本字符組成的條件來過濾

正則表達式:refexp,有一些bash支持的特殊文本字符來表示特殊含義,如果特殊字符當原本字符匹配需要轉義

 

 正則表達式一般分兩類

 基本正則表達式: BRE

 擴展正則表達式: ERE

 

 grep 命令基本語法

 

 grep [option] [refexp]  file

    –color 用特定的顏色高亮顯示模式中匹配的字符串,一般為紅色

    -v  顯示不被模式PATTERN匹配的行

    -o  表示只顯示被模式匹配的字符,而不是整個行

    -q  靜默模式不輸出信息

    -A # after 顯示到匹配到的后 #

    -B # before 顯示到匹配的前 #

    -C # context 顯示匹配的前后各幾行

    -E  使用擴展正則表達式

        (基本和擴展的功能類似,只是轉義方式不同)

 

 基本正則表達式:

 字符匹配

 . :  任意單個字符

 ? :  匹配其前單個字符01

 * :  匹配其前單個字符任意次

 .* : 匹配任意長度的任意字符

 [] : 表示匹配[]里的字符集,[ab]及包含ab的字符

 [^]: 表示匹配除了[]里的其它任意字符,[^ab]及不包含ab的字符

 

 []里同樣支持特殊通配符:

 [0-9] 表示單個09的數字

 [:digit:] 表示所有數值,同上

 [a-z] [:lower:] 表示單個小寫字母

 [A-Z] [:upper:] 表示單個大寫字母

 [:alpha:] [a-zA-Z] 表示單個字母

 [:alnum:] 表示字母或數字

 [:space:] 匹配空格

 [:punct:] 表示所有標點符合

 注意:在使用中,[::]這種格式[::]里帶特殊單詞的需要再加[]來表示,比如匹配空格則為'[[:space:]]'

 

 次數匹配

 \?  : 0次或1

 \+  : 匹配其前字符一次以上

 \{m\}     :匹配其前字符m

 \{m,\}    : 匹配其前字符至少m

 \{m,n\}   :匹配其前字符至少m次,至多n

 

字符錨定

 ^ : 行首錨定

 $ : 行尾錨定

 ^$ : 表示空行匹配

 \< \b: 行首錨定

 \> \b: 行尾錨定

 \<PATTERN\> 錨定匹配PATTERN的作為單詞 \<root\>  \broot\b

 \(\) : 對()里匹配PATTERN的做分組

     \1為后項引用前面第一個分組

 

 

擴展正則表達式:

 

用法

grep -E 'PATTERN' [file]

egrep  'PATTERN'  [file]

 

字符匹配和基本相同

[] [^] [[::]] 用法一樣

 

次數匹配

* 匹配前面字符任意次

? 01

+ 1次以上

{m} 匹配多少次

{m,} 至少m

{m,n} 只是m次,至多n

{0,n} 至多n

 

錨定和基本用法一樣

 

分組直接使用(),不要用\轉義

后項引用 \1 \2 \3

 

擴展的功能:

或者

(c|C)at : cat后者Cat

(root|tom|user1)

 

 

 

練習1

1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式)
grep -i '^s' /proc/meminfo
grep  '^[Ss]' /proc/meminfo
grep  -E  '^(s|S)' /proc/meminfo
2、顯示/etc/passwd文件中不以/bin/bash結尾的行
grep  -v  '/bin/bash$'  /etc/passwd
3、顯示用戶rpc默認的shell程序
grep  '^\<rpc\>'  /etc/passwd | cut -d: -f7
4、找出/etc/passwd中的兩位或三位數
grep  '\<[0-9][0-9]\?\>'  /etc/passwd
grep  '\<[0-9]\{2,3\}\>'  /etc/passwd
5、顯示/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面存非空白字符的行
grep  '^[[:space:]]\+.*[^[:space:]]'  /etc/grub2.cfg
6、找出"netstat -tan"命令的結果中以'LISTEN'后跟任意個空白字符結尾的行
netstat  -tan  '.*LISTEN[[:space:]]*$'
7、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin),而后找出/etc/passwd文件中用戶名同shell名的行
grep  '^\<\(.*\)\>.*/\1$'  /etc/passwd
grep  '^\<\(.*\)\>.*\<\1\>$' /etc/passwd

 

練習2

1、顯示當前系統root、mage或wang用戶的UID和默認shell
grep -E '^(root|mage|wang)\>' /etc/passwd |cut -d: -f7
2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行
grep -E -o '^\<[[:alnum:]_]+\>\(\)' /etc/rc.d/init.d/functins
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
echo "/etc/rc.d/init.d/functions" grep -E -o '[^/]+/?$'
4、使用egrep取出上面路徑的目錄名
echo "/etc/rc.d/init.d/functions" | grep -E '/.*/'  
5、統計以root身份登錄的每個遠程主機IP地址的登錄次數
last | grep -o 'root\>.*\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]' | tr -s ' '| cut -d' ' -f3 | uniq -c
v6、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255
grep  -E  '\<([0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>'
v7、顯示ifconfig命令結果中所有IPv4地址
ifconfig | grep -o '\(\([0-9]\|1[0-9]\|1[0-9]{2}\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\([0-9]\|1[0-9]\|1[0-9]{2}\|2[0-4][0-9]\|25[0-5]\)'

 

原創文章,作者:ailisa5520,如若轉載,請注明出處:http://www.www58058.com/30111

(0)
ailisa5520ailisa5520
上一篇 2016-08-07
下一篇 2016-08-07

相關推薦

  • 優云軟件老司機:如何讓運維操作更輕松、高效

    講師介紹 龐輝富 ?廣通軟件技術總監 ?擁有10多年IT運維管理軟件研發經驗 ?致力于自動化運維解決方案的研究和推廣 ?主導研發的產品廣泛應用于海關、公安、能源等多個行業 技術發展給運維帶來的挑戰 當前的IT建設在這些新技術的演進下,我們看到的是呈現“雙態IT”特征。Gartner也提出雙模IT理論,與現在談的雙態IT是異曲同工的,不再是一種單純的形態,而是…

    系統運維 2017-01-09
  • IP地址之IPv4

    一、概述   IP地址有IPv4和IPv6兩個版本,目前我們通常所說的IP地址是指IPv4。   IP地址由32位的二進制數組合而成,為了方便人類記憶,將二進制轉換成4個十進制的數值。   在這32位數據中分為網絡號與主機號兩個部分。 二、IP的分級   IP網段分為五個等級,其定義如下:   A類:規定前面…

    Linux干貨 2016-02-14
  • 如何在CentOS上構架一個簡易的局域網web服務器

    首先,要取得適用你系統版本的http源碼包,這里推薦兩個網站: httpd.apache.org www.kernel.org 根據自己系統的版本下載相應的源碼包; CentOS7 下載 httpd-2.4.25.tar CentOS6 下載 httpd-2.2.32.tar 以CentOS 6 示例: 首先,我們先來為http…

    2017-03-09
  • 第六周作業

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;          cp/etc/rc.d/rc.sysinit /tmp/     &nbs…

    2017-09-04
  • shell腳本編程之運算

    一、數學運算   1、expr命令     此命令可以在命令行執行數學運算操作。     由于此命令使用時過于麻煩,所以不推薦使用。   2、方括號和雙圓括號      $[ EXPRESSION ]      $((&…

    Linux干貨 2015-12-31
  • 8月5日作業

    課堂練習: 1、找出ifconfig命令結果中本機的所有IPv4地址 [root@localhost ~]# ifconfig | tr -s " " |head -2 | tail -1 |cut …

    Linux干貨 2016-08-15
欧美性久久久久