正則表達式及grep使用

正則表達式分為:“基本正則表達式 BRE”跟“擴展正則表達式 ERE”

基本正則表達式:

    (1)字符匹配    

          "."任意單個字符

           "[]"匹配指定范圍內的單個字符

          "[^]"匹配字符以外的單個字符

    (2)次數匹配

          "*"匹配前面字符的任意次 (.*:組合就相當于glob中的"*"匹配任意字符任意次)

          "\?"匹配前面的字符0次或1次;"\+"匹配前面的字符至少1次

          "\{m\}"匹配前面的字符"m"次;"\{m,n\}"匹配前面的字符至少"m"次至多"n"次

    (3)位置錨定

          "^"行首;"$"行尾;("^$":真空行,什么都沒有。 "^[[:space:]]*$"有空白字符的空行。)

          "\<"或"\b"詞首;"\>"或"\b"詞尾;

    (4)分組

         "\(\)"將一個或多個字符捆綁在一起,當一個整體處理;

         "\1"后項引用,引用從左向右數第一個分組所匹配到的字符;以此類推"\2"就是第2個分組所匹配到的字符,"\3"就是第三個….

    blob.png(圖很丑看明白就好,哈哈..)

        注意:后項引用是直接使用前一個分組已經匹配出來的字符結果,而次數匹配的是相當于在做1次或多次匹配

擴展正則表達式:

    (1)字符匹配    

          "."任意單個字符

           "[]"匹配指定范圍內的單個字符

          "[^]"匹配字符以外的單個字符

    (2)次數匹配

          "*"匹配前面字符的任意次 (.*:組合就相當于glob中的"*"匹配任意字符任意次)

          "?"匹配前面的字符0次或1次;"+"匹配前面的字符至少1次

          "{m}"匹配前面的字符"m"次;"{m,n}"匹配前面的字符至少"m"次至多"n"次

    (3)位置錨定

          "^"行首;"$"行尾;("^$":真空行,什么都沒有。 "^[[:space:]]*$"有空白字符的空行。)

          "\<"或"\b"詞首;"\>"或"\b"詞尾;

    (4)分組

         "()"將一個或多個字符捆綁在一起,當一個整體處理;

         "\1"后項引用,引用從左向右數第一個分組所匹配到的字符;以此類推"\2"就是第2個分組所匹配到的字符,"\3"就是第三個….

    (5)或者   "|" a|b:a或者b

           A|asd:A或者asd

            (cai)|(CA)I:cai或者CA


        大部分跟正則表達式相同,有些只是去掉"\"反斜線逃。

        正則表達式默認工作在貪婪模式下。

grep:是一個可以使用正則表達式搜索匹配的文本過濾工具,使用正則表達式可以做到匹配出很多“glob”匹配不出的內容。

       
            grep [OPTIONS] PATTERN [FILE...]
            grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
                        選項:
                                                        --color=auto: 對匹配到的文本著色顯示;
                                                        -v: 顯示不能夠被pattern匹配到的行;
                                                        -i: 忽略字符大小寫;
                                                        -o: 僅顯示匹配到的字符串;
                                                        -q: 靜默模式,不輸出任何信息;
                                                        -A #:after, 后#行
                                                        -B #: before, 前#行
                                                        -C #:context, 前后各#行
                                                        -E:使用ERE;

grep使用演示:

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

# grep -i "^s" /proc/meminfo 
# grep "^[Ss]" /proc/meminfo
# grep "^S" /proc/meminfo && grep "^s" /proc/meminfo (感謝“N21-藍”妹子的細心實驗檢查,這個答案是有問題的,各位可以看下有什么問題檢驗一下自己。)

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

# grep -v "/bin/bash$" /etc/passwd

3、顯示/etc/passwd文件中ID號最大的用戶的用戶名;

# sort -t: -k3 -n /etc/passwd | tail -1 | grep -o "^[[:alnum:]]\+\b"
# sort -t: -k3 -n /etc/passwd | tail -1 | grep -o -E "^[[:alnum:]]+\b"

4、如果用戶root存在,顯示其默認的shell程序;

# id root &> /dev/null && grep "^root" /etc/passwd | cut -d: -f7

5、找出/etc/passwd中的兩位或三位數;

# grep "\b[0-9]\{2,3\}\b" /etc/passwd
# grep -E "\b[0-9]{2,3}\b" /etc/passwd

6、顯示/etc/rc.d/rc.sysinit文件中,至少以一個空白字符開頭的且后面存非空白字符的行;

# grep "^[[:space:]]\+[^[:space:]]\+" /etc/rc.d/rc.sysinit

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

# netstat -tan | grep --color "LISTEN[[:space:]]*"

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

這題我使用bash腳本
#!/bin/bash
id bash &> /dev/mull || useradd bash
id testbash &> /dev/null || useradd testbash
id basher &> /dev/null || useradd basher
id nologin &> /dev/null || useradd -s /sbin/nologin nologin
grep --color "^\(\b[[:alnum:]]\+\b\).*\1$" /etc/passwd
#grep --color -E "^(\b[[:alnum:]]+\b).*\1$" /etc/passwd

1、顯示當前系統root、centos或user1用戶的默認shell和UID;

# grep -E '^(root|centos|user1)\>' /etc/passwd | cut -d: -f1,3,7

2、找出/etc/rc.d/init.d/functions文件(centos6)中某單詞后面跟一個小括號的行;

# grep -E -o "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions

3、使用echo輸出一絕對路徑,使用egrep取出其基名;

# echo "/mnt/sdc" | grep -E -o "[^/]+/?$" | cut -d"/" -f1

4、找出ifconfig命令結果中1-255之間的數值;

# ifconfig | grep -E --color "\b[0-9]{1,2}\b|\b1[0-9]{1,2}\b|2[0-4][0-9]?|\b25[0-4]?"

5、找出ifconfig命令結果中的IP地址;

# ifconfig | grep -E --color "((\b[0-9]{1,2}\b|\b1[0-9]{1,2}\b|2[0-4][0-9]?|\b25[0-5]?)\b\.){3}(\b[0-9]{1,2}\b|\b1[0-9]{1,2}\b|2[0-4][0-9]?|\b25[0-5]?\b)"

原創文章,作者:N21_志建,如若轉載,請注明出處:http://www.www58058.com/22226

(0)
N21_志建N21_志建
上一篇 2016-07-10 12:16
下一篇 2016-07-10 12:17

相關推薦

  • Linux運維之路-Linux基礎學習二

    Linux系統的一切皆文件思想會幫助我們學習

    2017-11-18
  • Linux安全和加解密

    概述:     所有業務的正常運轉,離不開一個安全的運行環境,系統安全性直接關系到業務穩定、可靠、以及可用性,本章就介紹一些系統安全相關的話題,具體包括:        1、加密基礎概念     2、CA和證書的基礎概念  &nb…

    Linux干貨 2016-09-23
  • linux系統基礎目錄結構及功能說明

    linux系統基礎目錄結構及功能說明 [root@localhost /]# ls bin boot dev etc home host lib lib64 media mnt opt proc root run sbin srv sys tmp usr var /bin:所有用戶可用的基本命令程序文件;/sbin:供系統管理使用的工具程序;/boot:引導…

    Linux干貨 2018-03-04
  • 馬哥教育網絡班20期第2周課程練習

    一、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關  示例演示。 linux上文件管理命令包括: ls,cat,pwd,cp,rm,cd,head,tail,more,less,cut,which,whereis,find,mkdir,mv; 1、ls 命令;顯示文件/文件夾清單   例如:如下顯示列出根目錄下的文件及目錄…

    Linux干貨 2016-06-23
  • 馬哥教育網絡班21期+第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別 集線器(HUB)是在OSI模型的第一層——物理層——連接多臺主機、延長網絡的設備。其主要功能是將從一個端口接收到的數據包轉發給所有端口。中繼器(Repeater)是將由電纜傳過來的電信號或光信號調整波形和放大再傳給另一個電纜的設備,提供多端口服務的中繼器稱作集線器。二者的主要區別是…

    Linux干貨 2016-08-29
  • 一次css頁面加載異常的折騰

    1       原始需求 近期在搭建平臺,因多域名會分割流量,所以希望將類似 ansible.178linux.com  salt.178linux.com qa.178linux.com 這些平臺整合為一個平臺,所示如下 ansible.178linux.com =è www.178li…

    系統運維 2015-06-10

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-07-12 14:44

    寫的很好,排版還可以在漂亮一點,加油

欧美性久久久久