Week4 正則表達式及grep命令

基本正則表達式元字符:

            字符匹配:
                .:匹配任意單個字符
                    grep "r..t" /etc/passwd                
                    []:匹配指定范圍內任意單個字符                
                    [^]:匹配指定范圍外任意單個字符                    
                        [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
                    grep "r[[:alpha:]][[:alpha:]]t"

            匹配次數:寫在要指定其出現次數的字符的后面
                *:匹配其前面的字符任意次 0,1,多次
                    grep "x\+y"
                        abxy
                        aby
                        xxxxxy
                        yab
                .*: 匹配任意長度的任意字符                
                \?:匹配其前字符0次或1次                
                \+:匹配其前的字符1次或多次,即字符出現至少1次                
                \{m\}:匹配其前字符m次                
                \{m,n\}:匹配其前字符至少m次,至多n次                    
                \{0,n\}:至多n次                    
                \{m,\}:至少m次
            位置錨定:
                ^:行首錨定 寫在模式最左側                
                $:行尾錨定 寫在模式最右側
                ^PATTERN$:用于PATTERN來匹配整行;
                    ^$:空白行;
                    ^[[:space:]]*$:空行或包含空白字符的行;                
                    \< 或 \b:詞首錨定,用于單詞模式的左側;                
                    \> 或 \b:詞尾錨定,用于單詞模式的右側;                
                    \<PATTERN\>:匹配完整單詞;
                單詞:非特殊字符組成的連續字符(字符串)都稱為單詞;
                
            分組及引用                
            \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理 反斜線表示轉義                    
                \(xy\)*ab


                Note:
                    分組括號中的模式匹配到的內容會被正則表達式引擎自動記錄于內部的變量中,這些變量為:
                    \1:模式從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字符;
                    \2:模式從左側起,第二個左括號以及與之匹配的右括號之間的模式所匹配到的字符;
                    \3
                    ...

grep命令: Global search REgular expression and Print out the line

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

    模式:由正則表達式的元字符及文本字符所編寫出的過濾條件;    grep  [OPTIONS]  PATTERN  [FILE...]
    grep  [OPTIONS]  [-e PATTERN | -f FILE]  [FILE...]

        OPTIONS:
            --color=auto:對匹配到的文本著色后高亮顯示;
            -i: ignorecase 忽略字符大小寫
            -o: 僅顯示匹配到的字符串本身
            -v: invert-match 反向匹配 顯示未被匹配到的行
            -E:支持使用擴展的正則表達式元字符;
            -q: --quiet, --silent:靜默模式,即不輸出任何信息;

            -A #:after, 后#行
            -B #:before,前#行
            -C #:context,前后各#行

egrep命令:

支持擴展的正則表達式實現類似于grep文本過濾功能;grep -E
egrep [OPTIONS] PATTERN [FILE...]
        選項:
            -i, -o, -v, -q, -A, -B, -C
            -G:支持基本正則表達式 

        擴展正則表達式的元字符:
            字符匹配
                .: 任意單個字符
                []:指定范圍內的任意單個字符
                [^]:指定范圍外的任意單個字符

            次數匹配
                *:任意次 0,1,多次
                ?:0次或1次 
                +:其前字符至少1次
                {m}:其前字符m次
                {m,n}:其前字符至少m次至多n次
                    {0,n}
                    {m,}
            位置錨定
                ^ 行首錨定 
                $ 行尾錨定
                \< \b 詞首錨定
                \> \b 詞尾錨定
            分組及引用
                (): 分組 括號內的模式匹配到的字符會被記錄于正則表達式引擎的內部變量中 
                后向引用:\1, \2, ...
            或
                a|b:a或者b;                    
                C|cat:C或cat
                (c|C)at:cat或Cat

練習

1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。

cp /etc/skel /home/tuser1 
chmod -R go=--- /home/tuser1

2、編輯/etc/group文件,添加組hadoop。

echo "hadoop:x:2017:" >> /etc/group

3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號;其家目錄為/home/hadoop。

echo "hadoop:x:1008:2017::/home/hadoop:/bin/bash" >> /etc/passwd

4、復制/etc/skel目錄為/home/hadoop,要求修改hadoop目錄的屬組和其它用戶沒有任何訪問權限。

cp -r  /etc/skel /home/hadoop 
chmod go=--- /home/hadoop

5、修改/home/hadoop目錄及其內部所有文件的屬主為hadoop,屬組為hadoop。

chown  -R  hadoop:hadoop  /home/hadoop

6、顯示/proc/meminfo文件中以大寫或小寫S開頭的行;用兩種方式;

grep "^[sS]" /proc/meminfogrep -i "^s" /pro/meminfo

7、顯示/etc/passwd文件中其默認shell為非/sbin/nologin的用戶;

grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1

8、顯示/etc/passwd文件中其默認shell為/bin/bash的用戶;

grep "/bin/bash" | cut -d: -f1

9、找出/etc/passwd文件中的一位數或兩位數;

grep -o  "\<[0-9]\{1,2\}\>" /etc/passwd

10、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;

grep "^[[:space:]]\+" /boot/grub2/grub.cfg

11、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;

grep "^#[[:space:]]\+[^[:space:]]\+" /boot/grub2/grub.cfg

12、打出netstat -tan命令執行結果中以‘LISTEN’,后跟空白字符結尾的行;

netstat -tan | grep 'LISTEN[[:space:]]\+$'

13、添加用戶bash, testbash, basher, nologin (此一個用戶的shell為/sbin/nologin),而后找出當前系統上其用戶名和默認shell相同的用戶的信息;

grep -E "^([^:]+).*\1$" /etc/passwd

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

(0)
alonedreameralonedreamer
上一篇 2017-02-11
下一篇 2017-02-12

相關推薦

  • 網絡管理及任務進程解析

     網絡管理————————————— 一.IP 地址 與路由  1.首先說的是IP地址:       它們可唯一標識IP 網絡中的設備,每臺主機必須具有唯…

    2017-07-02
  • linux下的文件查找命令對比(locate,find,grep,sed)

        在linux下,文件系統占據著非常重要的位置,而我們對于文件系統的操作也顯得尤為重要。 如果我們想熟悉的操作文件系統,其中,我們需要對文本的查找,截取等命令需要熟悉的掌握。 這里就不得不說幾個關于文本操作的幾個命令的作用詳細介紹和對比。比如: locate,find ,grep ,sed等。 這里,grep ,…

    Linux干貨 2016-08-15
  • Linux運維實戰之6:掛載/卸載磁盤分區

    上次博文我們具體討論了Linux系統中磁盤的分區及格式化( http://www.www58058.com/60811),本次博文我們具體來說說分區的掛載哈! 【問題引入】 已經格式化好的分區如何與系統現有的文件系統建立關聯(如何使用新分區)? 新的磁盤分區創建完成并格式化之后需要掛載(或裝入)到目錄樹上才能被使用。 何謂掛載/卸載? 【答】將某個…

    Linux干貨 2016-12-04
  • 手動創建掛載交換分區

    SWAP分區 SWAP [root@cloud ~]# fdisk /dev/sdb Command (m for help): d Selected partition 1 Command (m for help): w The…

    Linux干貨 2016-06-09
  • 磁盤管理和文件系統

    磁盤結構 設備文件:關聯至一個設備驅動程序,進而能夠跟與之對應硬件設備進行通信 一切皆文件:open(), read(), write(), close() 設備類型: 塊設備:block,存取單位“塊”,磁盤 字符設備:char,存取單位“字符”,鍵盤 設備號碼: 主設備號:major number, 標識設備類型 次設備號:minor number, 標…

    Linux干貨 2017-04-23
  • 初識文件系統和軟硬鏈接

    什么是文件系統?         磁盤分區以后必須設置磁盤的文件系統才可以正式使用,文件系統定義了文件存儲的類型,也就是這個文件要按照怎樣的方式存入磁盤分區。         linux中文件系統的類…

    2017-07-20

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-03-30 14:15

    非常好,正則在手,天下我有,繼續加油!

欧美性久久久久