文本處理工具grep

正則表達式:Regular Expression REGEXP

        由一類特殊字符及文本字符所編寫的模式,表示控制或通配的功能

兩類:

    基本正則表達式BRE:

    擴展正則表達式ERE:

*** grep    GLoble search Regular exression and Print out the line

     文本過濾(一定模式pattern)2

     -v    反向匹配 顯示未匹配到的行

     -e    實現多個選項間的邏輯or關系

     -o    僅顯示匹配到的字符本身 而不是整行

     -n  顯示匹配的行號

     -c    統計匹配的行數

     -w    匹配單詞

     -E    支持擴展正則表達式  egrep

     -i    忽略字符大小寫

     -q –quiet  靜默模式,不輸出任何信息   可用$?查看命令執行情況

     -A# :after    顯示匹配行及其前#行

     B# :before   匹配行及其后#行

     C# :context  匹配行及其前后#行

1.基本正則表達式元字符:

     .    任意 單個字符

     *    前面字符 任意次 可以不出現 0 – ∞

     .*   任意長度 任意字符

     \?   其前面字符 0次或一次   可有可無

     \+   其前面字符 1次或多次

     \{m,n\}    其前面字符m至n次

      \{m\}   指定出現m次   \{,n\}  至多n次

    

     []   指定范圍內任意單個字符

     [^]  指定范圍外的任意單個字符

     數字:[:digit:],小寫字母[:lower:],大寫字母[:upper:],字母[:alpha:],

     字母數字[:alnum:],標點[:punct:],空格[:space:]

      

2.位置錨定:

     ^    行首錨定,整個模式最左側

     $   行尾錨定,整個模式最右側

     ^pattern$    用patt匹配整行

     ^$   空白行  不可包含空格

     ^[[:space:]]*$ 空白行或包含任意空格的行

    

     \<或\b     詞首錨定

     \>或\b     詞尾錨定

     \<pattern\>匹配完整單詞

3.分組及引用:

     \(\)     括號內的字符作為一組   \(xy\)\+  一個或多個xy 括號可嵌套不可交叉

     可用\1   \2   \3  …引用對應分組

      

*** 擴展正則表達式:          部分字符區別grep 不用加"\"

    egrep => grep -E

1.擴展正則表達式的元字符:

     .

     []

     [^]

    

     2.次數匹配:        不用加轉義字符  "\"

     *

     ?

     +

     {m}

     {m,n}

3.位置錨定:

     ^

     $

     \<,\b

     \>,\b

    

4.分組及引用:

     ()

     后向引用:\1  \2  \3  …

5.或:

     a|b a或者b ;    z|Zjj   z或Zjj ;     (z|Z)jj  zjj或Zjj

    

    

     例   匹配1到255

     egrep -o '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>'

    

     例   passwd 用戶名與shell相同的行

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

      

     例   簡單 過濾出ip地址 不嚴謹

     egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"

    

===練習:grep

1.顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式)

#grep -i "^s" /proc/meminfo 

#grep  "^[sS]" /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  -o "[[:digit:]]\{2,3\}" /etc/passwd

5.顯示/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面存非空白字符的行

#grep "^[[:space:]]\+[^[:space:]].*"  /etc/grub2.cfg 

6.找出"netstat -tan"命令的結果中以'LISTEN'后跟0、1或多個空白字符結尾的行

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

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

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

===練習:egrep

1.顯示當前系統root、mage或wang用戶的UID和默認shell

#egrep "^(root|mage|wang)" /etc/passwd|cut -d: -f3,7

2.找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行

#grep "^[[:alnum:]_]*\>()" /etc/rc.d/init.d/functions

3.使用egrep取出/etc/rc.d/init.d/functions中其基名

#echo "/etc/rc.d/init.d/functions"|grep -o "[^/]*$"

4.使用egrep取出上面路徑的目錄名

#echo "/etc/rc.d/init.d/functions"|egrep -o "^.*/"

5.統計以root身份登錄的每個遠程主機IP地址的登錄次數

#who|grep "root"|grep -o "(.*)"|uniq -c

不支持正則表達式元字符:

fgrep:    fast grep  

用不到元字符時 fgrep更快

===常用工具:

#cat [OPTION]… [FILE]…查看文件內容    tac:從行尾開始顯示   rev:每行字符倒敘顯示

     -A:顯示所有控制符

     -n: 對每一行進行編號

     -b:非空行編號

     -s:壓縮連續的空行成一行

     -E: 顯示行結束符$

    

#more [OPTIONS…] FILE…   分頁查看文件

    -d: 顯示翻頁及退出提示

#less  分頁查看文件  可回看

#head [OPTION]… [FILE]…  顯示文件前幾行  默認10行

     -c #: 指定獲取前#字節

     -n #: 指定獲取前#行

     -#:指定行數

#tail [OPTION]… [FILE]…  顯示文件最后幾行 默認10行

     -#:

     -f: 跟蹤顯示文件新追加的內容,常用日志監控

     -c #: 指定獲取后#字節

     -n #: 指定獲取后#行

         tail -n0 -f FILE $

paste [OPTION]… [FILE]…  合并兩個文件同行號的列到一行

     -d 分隔符:指定分隔符,默認用TAB

     -s : 所有行合成一行顯示

     paste f1 f2

     paste -s f1 f2

#wc  word count 單詞統計  常和管道|一起使用

     -l    統計行數

     -w    單詞數

     -c    字節數

     -m  字符數

cut 從文件中的某些行剪切片段

     -d    以指定的 字符作為 分隔符,  可以不加空格直接加字符  -d# 井號為分隔符

     -f    顯示出指定字段    -f3    #:單個字段  #-#:連續多個字段  #,#離散的多個字段

     -c  按字符切割

     –output-delimiter=STRING指定輸出分隔符  默認":"

#sort 排序

     -n    以數值 大小進行排序

     -tCHAR     指定分隔符

     -k#   設置比較字段          -t: -k3   冒號為分隔符 第3個字段

     -r    逆序 排序

     -f    忽略字符大小寫

     -u    重復的行保留一份      連續相同為重復

#uniq 報告或移除重復的行      配合sort 統計重復出現次數

     -c    統計 每行重復次數

     -u    只顯示 無重復的行

     -d    僅顯示 有重復的行

#diff 逐行比較兩個文件的不同       可制作補丁文件patch

     diff   file.old  file.new    

     -u 輸出“統一的(unified)”diff格式文件,適用于補丁文件

    

     diff /oldpath /newpath>/patchfile  制作補丁  把diff命令結果重定向

    

     $diff -u foo.conf-broken foo.conf-works>foo.patch

     $patch -b foo.conf-broken foo.patch

    

     patch   打補丁

     -b選項來自動備份改變了的文件

     patch[OPTIONS] -i (指定補丁文件) /patchfile   /oldpath

     patch /oldpath</patchfile

===練習:cut sort tr head tail uniq

1、找出ifconfig命令結果中本機的所有IPv4地址

#ifconfig|head -2|tail -1|cut -d: -f2|cut -d" " -f1

2、查出分區空間使用率的最大百分比值

#df|tr -s " " ":" |cut -d: -f5|sort -nr|head -1

3.查出用戶UID最大值的用戶名、UID及shell類型

#sort -nrt: -k3 /etc/passwd|head -1|cut -d: -f1,3,7

4.查出/tmp的權限,以數字方式顯示

#stat /tmp|head -4|tail -1|cut -d "(" -f2|cut -d "/" -f1

5.統計當前連接本機的每個遠程主機IP的連接數,并按從大到小排序

#netstat -nt|tr -s " " ":"|cut -d: -f6|uniq -c|sort -nr

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

(1)
JasperJasper
上一篇 2016-08-04 21:40
下一篇 2016-08-04 21:40

相關推薦

  • Homework Week-8 網絡及腳本編程

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 設備 功能 使用場景 網橋 用于連接不同網段,將相似的網絡連接起來,隔離信息。 連接不同部門間的局域網;連接地理位置分散并且相距較遠的局域網,可以增加工作的物理距離;采用由網橋連接的多個局域網調節負載;網橋可以設置在局域網的關鍵部位,防止單點失常而破壞整個系統等。 集線器 對接收…

    Linux干貨 2016-10-09
  • linux啟動和內核管理

    linux啟動和內核管理:1. 加載BIOS 的硬件信息,獲取第一個啟動設備2. 讀取第一個啟動設備MBR 的引導加載程序(grub) 的啟動信息3. 加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備4. 核心執行init 程序,并獲取默認的運行信息5.init 程序執行/etc/rc.d/rc.sysinit 文件6. 啟動核心的外掛?!?/p>

    Linux干貨 2017-03-28
  • 軟件安裝包的管理

    rpm安裝包的管理 rpm的數據庫( 公共) :/var/lib/rpm 程序包名稱及版本 依賴關系 功能說明 包安裝后生成的各文件路徑及校驗碼信息 安裝 rpm:{-i} -v:顯示詳細信息 -h:以#顯示程序包管理執行進度 rpm -ivh PACKAGE_FILE … [install-options] –test :測試安裝,但不真正執行安裝過程 –…

    Linux干貨 2017-04-23
  • Nginx lnmp環境及https的實現

    一、http事務簡明  request: <method> <URL> <VERSION> MHADERS <body> response: <version><status><reason phrase> <HEADERS> … <body&…

    2014-09-25
  • N25-第七周

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;     [root@localhost ~]# fdisk -l Disk /dev/sda: 42.9 GB, 42949672960 bytes 255…

    Linux干貨 2017-05-21
  • 用戶、組及其管理

    用戶和組管理    Linux是一個多用戶、多任務的操作系統。多用戶、多任務就是可以在系統上建立多個用戶,多個用戶可以在同一時間內登錄同一臺主機的系統執行不同的任務,而互不影響。例如某臺linux服務器上有4個用戶,分別是root、www、ftp和mysql,在同一時間內root用戶可能在管理維護系統,www用戶可能在修改自己的程序和操作…

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