正則表達式

grep:Global search REgular expression and Print out the line

        文本搜索工具,根據用戶指定的”模式“對目標文本逐行進行匹配檢查;打印匹配到的行

       模式:由正則表達式字符及文本字符所編寫的過濾條件

     grep命令選項:

        –color=auto:對匹配到的文本著色顯示;

        -v:顯示不能夠被匹配到的行;

        -i:忽略字符的大小寫

       -n:顯示匹配到的行號

       -c:統計匹配的行數

      -o:僅顯示匹配到的字符串

        -q:靜默模式,不輸出任何信息

        -A#:after,后#行

         -B:before,前#行

         -C:context,前后各#行

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

                      grep -e ’cat‘ -e ‘dog’file 

         -w:整行匹配整個單詞

         -E:使用ERE

   元字符分類:字符匹配,匹配次數,位置錨定,分組

           字符匹配:

                . :匹配任意單個字符

                [] :匹配指定范圍內的任意單個字符

                [^]:匹配指定范圍內的任意單個字符

                 [:diget:]數字    [:lower:]小寫字母  [:upper:]大寫字母  [:alpha:] 任意字母      [:alnum:] 數字和字母   [:space:]空格       [:punct:]標點符號

                匹配次數:

                   *:匹配前面的字符任意次  eg:a*b   匹配a任意次

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

                   \?:匹配其前面的字符0次或1次

                    \+:匹配其前面的字符至少1次

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

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

                     \{,n\}:匹配其前面的字符至多n次

                     \{m,\}:匹配其前面的字符至少M次

  位置錨定:

                     ^:行首錨定,用于模式的最左側

                     $:行尾錨定,用于模式的最右側

                      ^$:空行

                      ^[[:space:]]$空白行

                   \<或\b:詞首錨定,用于單詞的左側

                    \>或\b:詞尾錨定,用于單詞的右側

                    \<PATTERN\>:匹配整個單詞 eg: \<root\>\ 或 \broot\b

    分組:\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,如:\(root\)\+

分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, …

\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;

實例:\(string1\+\(string2\)*\)

\1: string1\+\(string2\)*

\2: string2

后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)

egrep 擴展的正則表達式

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

          字符匹配:

             .任意單個字符

            []指定范圍的字符

            [^]不在指定范圍的字符

         次數匹配
             *:匹配前面的字符任意次   

             ?:0或1次

              +:1次以上

              {m}:匹配m次

               {m,n}:至少m次至多n次

         位置錨定:

               ^:行首錨定

               $:行尾錨定

                \<,\b:詞首錨定

                \>,\b:詞尾錨定

           分組:()   后向引用:\1,\2……    

                  或a|b     C|cat:c或cat

                     (C|c)at:Cat或cat



[root@localhost ~]# tail -n 0 -f /var/log/messages &      只顯示新的監控內容   (后臺執行)不影響新的操作

  剪切df下%前的數字

 1[root@localhost ~]# df |tr -s " " ":"|cut -d: -f5|tr -d "%"

Use

2

0

19

21

1

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

     [root@localhost ~]# df |tr -s ' ' ':'|cut -d: -f5|sort -n -r

3查出/tmp的權限,以數字方式顯示      正則表達式正則表達式正則表達式正則表達式

[root@localhost ~]# stat /tmp|head -4|tail -1|cut -d: -f2|tr -dc '[[:digit:]]'

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

   [root@localhost ~]# cat /etc/passwd |cut -d: -f 1,3,7|sort -t: -k2 -nr正則表達式

練習:grep

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

        [root@localhost ~]# egrep '^(s|S)' /proc/meminfo

             [root@localhost ~]# grep ^[sS] /proc

            [root@localhost ~]# grep -i "^s" /proc/meminfo


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

           [root@localhost ~]# grep -v /bin/bash$ /etc/passwd

?3、顯示用戶rpc默認的shell程序

            [root@localhost ~]# grep '^rpc\b' /etc/passwd |cut -d: -f7

                 

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

[root@localhost ~]# grep "\b[0-9]\{2,3\}\b" /etc/passwd

[root@localhost ~]# grep "\b[1-9][0-9]\{1,2\}\b" /etc/passwd

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

[root@localhost ~]# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg

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

[root@localhost ~]# netstat -tan |grep "LISTEN[[:space:]]$\?"

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

       [root@localhost ~]# grep '^\b\(.*\)\b.*/\1$' /etc/passwd

          [root@localhost ~]# grep '^\<\(.*\)\>.*\b\1\b$' /etc/passwd

           [root@localhost ~]# grep '^\(.*\).*/\1$' /etc/passwd

      

練習egrep

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

              root@localhost ~]# egrep "^\<root\>|^\<mage\>|^\<wang\>" /etc/passwd | cut -d: -f3,7

[root@localhost ~]# egrep "^(root|mage|wang)\b" /etc/passwd |cut -d: -f3,7

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

[root@localhost ~]# grep -E "^[[:alnum:]_]+\(\)" /etc/rc.d/init.d/functions 

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

init.d/function" |egrep -o "[^/]+/?$"

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

(0)
蟄伏蟄伏
上一篇 2016-08-08 16:11
下一篇 2016-08-08 16:11

相關推薦

  • 硬盤及文件系統基礎概念

    機械硬盤HDD(Mechanical hard disk) 機械硬盤中所有的盤片都裝在一個旋轉軸上,每張盤片之間是平行的,在每個盤片的存儲面上有一個磁頭,磁頭與盤片之間的距離比頭發絲的直徑還小,所有的磁頭聯在一個磁頭控制器上,由磁頭控制器負責各個磁頭的運動。 磁頭(Head): 對硬盤上的數據進行讀寫操作. 磁道(Track) 當磁盤旋轉時,磁頭若保持在一個…

    Linux干貨 2017-04-09
  • Linux第四周學習博客作業

    對第四周學習的內容進行總結

    Linux干貨 2017-12-23
  • keepalived

    簡介:     vrrp, virtual routing redundant protocol, 虛擬路由協議, 是為了解決局域網中配置靜態網關出現單點失敗現象的路由協議; 設計目標時是支持特定情況下IP數據流量失敗轉移不會引起混亂, 允許主機使用單路由器, 以及及時在實際第一跳路由器使用失敗的情形下, 仍然能夠維護…

    Linux干貨 2016-11-11
  • 輕松實現源碼打包安裝[原創]

    通常我們在Linux/Unix下安裝一平臺時往往需要十幾甚至更多安裝包,這些源碼包來源于網絡、本地硬盤、移動設備。有時碰到網絡不暢通或下載地址失效會帶來很多麻煩,一個好方法便是將常用的軟件包下載到本地硬盤存放。問題是久而久之連自己都不曉得哪些包才是適用的?,F用makeself來實現自解壓倒安裝倒是一個很好的解決方案,下面以制作Func客戶端安裝包為例。 一、…

    Linux干貨 2015-03-27
  • 虛擬機的三種網絡模式

    前言     虛擬機的網絡模式,是環境部署時的重要環節。不同的運行環境對網絡的要求也是不用的,本章節重點介紹虛擬機的三種網絡模式、以及他們之間的區別 虛擬機網絡模式      無論是vmware,virtual box,virtual pc等虛擬機軟件,一般來說,虛擬機有三種網絡模式: 1.橋接 2…

    2017-07-11
欧美性久久久久