文本處理工具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
下一篇 2016-08-04

相關推薦

  • 系統基礎之權限管理作業題

    1.問題:  在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如: alice能對這些新文件有讀寫權限,組g3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于g1,g2,g3)不能訪問這個文件夾。 [root@wen-7 testdir]# mkdir -p /data/…

    Linux干貨 2016-08-04
  • grub啟動

    grub: GRandUnified Bootloader(統一的引導模式分為3個階段) grub 0.97: grub legacy grub 2.x: grub2 grub legacy: stage1: mbr stage1_5: mbr之后的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統 stage2:磁盤分區(…

    Linux干貨 2017-05-15
  • 馬哥教育網絡班21期+第6周課程練習

    VIM基礎知識 常用模式: 編輯模式–>命令模式 輸入模式 末行模式:內置的命令行接口 模式轉換: 編輯模式–>輸入模式 i:在光標所在處前轉換為輸入模式; a:在光標所在后面轉入輸入模式; o:在當前光標所在行的下方打開一個新行,并轉為輸入模式; I:在當前光標所在行的行首輸入; A:在當前光標所在行的行尾輸入; O:在當前光標所在行的上方…

    Linux干貨 2016-08-15
  • 描述計算機的組成及其功能

    CPU:計算器,控制器,寄存器內存輸入輸出設備

    Linux干貨 2016-08-15
  • 第三天作業

    1、列出當前系統上所有已經登錄的用戶的用戶名。注意:同一個用戶登錄多次,則只顯示一次即可 [root@localhost ~]# who | cut -d ' ' -f1 | sort | uniq [root@localhost ~]# who (unknown) :0         &nbsp…

    Linux干貨 2016-08-30
  • 進程和計劃任務

    進程概念 內核的功用:進程管理,文件系統,網絡功能,內存管理,驅動程序,安全功能等 Process:運行中的程序的一個副本,是被載入內存的一個指令集和     進程ID(Process ID,PID)號碼被用來標記各個進程     UID,GID和SELinux語境決定對文件系統…

    Linux干貨 2016-09-13
欧美性久久久久