真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Linun文本搜索之grep及正則表達(dá)式-創(chuàng)新互聯(lián)

GNU/Linux中常用的文本處理工具有三種:

創(chuàng)新互聯(lián)成都企業(yè)網(wǎng)站建設(shè)服務(wù),提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)網(wǎng)站開(kāi)發(fā),網(wǎng)站定制,建網(wǎng)站,網(wǎng)站搭建,網(wǎng)站設(shè)計(jì),成都響應(yīng)式網(wǎng)站建設(shè)公司,網(wǎng)頁(yè)設(shè)計(jì)師打造企業(yè)風(fēng)格網(wǎng)站,提供周到的售前咨詢和貼心的售后服務(wù)。歡迎咨詢做網(wǎng)站需要多少錢(qián):13518219792

    grep、egrep、fgrep:文本搜索工具;

    sed:流編輯器、文本編輯工具;

    awk:文本報(bào)告生成器;

今天主要來(lái)說(shuō)一下grep和正則表達(dá)式;

一、概述

grep(Global search REgular expression and Print out the line.),是一個(gè)文本搜索工具;根據(jù)指定“pattern(過(guò)濾條件)”對(duì)目標(biāo)文本逐行進(jìn)行匹配檢查并打印出符合條件的行;

什么是正則表達(dá)式?

    正則表達(dá)式:由一類特殊字符及文本字符所編寫(xiě)的模式,有些字符不表示其字面意義,而是用于表示控制或通配的功能;

而正則表達(dá)式又分為兩類:

        基本正則表達(dá)式:BRE

        擴(kuò)展正則表達(dá)式:ERE

     正則表達(dá)式引擎:利用正則表達(dá)式模式分析所給定的文本的程序。

 grep家族:

        grep:支持使用基本正則表達(dá)式,(也可以使用一個(gè)選項(xiàng)“-E”支持?jǐn)U展的正則表達(dá)式;到下面再說(shuō));

        egrep:支持使用擴(kuò)展

正則表達(dá)式;

        fgrep:不支持使用正則表達(dá)式;

grep命令

        grep [選項(xiàng)] [模式] [FILE...]

常用選項(xiàng)示例

-i:忽略字符大小寫(xiě);

[root@localhost~]# cat test.txt
He love his lover.
he like his lover.
he love his liker.
He like his liker. 
[root@localhost~]# grep -i "he" test.txt 
He lovehis lover.
he likehis lover.
he lovehis liker.
He likehis liker.

-n:顯示行號(hào);

[root@localhost ~]# grep -ni "he" test.txt    
1:He love his lover.    
2:he like his lover.    
3:he love his liker.    
4:He like his liker.

-o:僅顯示匹配到的文本自身;

 [root@localhost ~]# grep "bash$" /etc/passwd    
 root:x:0:0:root:/root:/bin/bash    
 mageedu:x:1000:1000:mageedu:/home/mageedu:/bin/bash    
 gentoo:x:3003:3003::/home/gentoo:/bin/bash    
 ubuntu:x:3004:4004::/home/ubuntu:/bin/bash    
 mint:x:3100:3100::/home/mint:/bin/bash    
 hadoop:x:3102:3102::/home/hadoop:/bin/bash    
 hive:x:991:986::/home/hive:/bin/bash    
 linxuejing:x:3103:3103::/home/linxuejing:/bin/bash    
 [root@localhost ~]# grep -o "bash$" /etc/passwd    
 bash    
 bash    
 bash    
 bash    
 bash    
 bash    
 bash    
 bash  
注:這里首先是顯示以bash結(jié)尾的行,然后加“-o”選項(xiàng)只顯示匹配到字符串本身;

-v:--invert-match:取反,反相匹配;

    [root@localhost ~]# grep -v "bash$" /etc/passwd    
    bin:x:1:1:bin:/bin:/sbin/nologin    
    daemon:x:2:2:daemon:/sbin:/sbin/nologin    
    adm:x:3:4:adm:/var/adm:/sbin/nologin    
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin    
    sync:x:5:0:sync:/sbin:/bin/sync    
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown    
    halt:x:7:0:halt:/sbin:/sbin/halt    
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin   
    ...... 
   注:顯示不是以“bash”結(jié)尾的行;

--color=auto:對(duì)匹配到的文本著色后高亮顯示(這里指的是CentOS 7);

    # alias    
    alias cp='cp -i'    
    alias egrep='egrep --color=auto'    
    alias fgrep='fgrep --color=auto'    
    alias grep='grep --color=auto'    
    alias l.='ls -d .* --color=auto'    
    alias ll='ls -l --color=auto'    
    alias ls='ls --color=auto'    
    alias mv='mv -i'    
    alias rm='rm -i'    
    alias which='alias | /usr/bin/which--tty-only --read-alias --show-dot --show-tilde'  
    注:CentOS 5,6的話需要以alias grep='grep --color=auto'手動(dòng)來(lái)定義;

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

    root@localhost ~]# grep -q "root"/etc/passwd    
    [root@localhost ~]# echo $?    
    0  
    可使用“$?”來(lái)顯示上條命令的執(zhí)行狀態(tài)結(jié)果,“0”表示成功,有匹配到字符串;

-e PATTERN:多模式匹配;

[root@localhost~]# grep -e "r..t" -e "b..h" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin
chrony:x:993:990::/var/lib/chrony:/sbin/nologin
mageedu:x:1000:1000:mageedu:/home/mageedu:/bin/bash
gentoo:x:3003:3003::/home/gentoo:/bin/bash
ubuntu:x:3004:4004::/home/ubuntu:/bin/bash
mint:x:3100:3100::/home/mint:/bin/bash
hadoop:x:3102:3102::/home/hadoop:/bin/bash
hive:x:991:986::/home/hive:/bin/bash
linxuejing:x:3103:3103::/home/linxuejing:/bin/bash

-f FILE:FILE為每行包含了一個(gè)pattern的文本文件,及grep script;

[root@localhost~]# vim grep.txt
root
bash

Linun文本搜索之grep及正則表達(dá)式

-A num:顯示匹配到的行的后n行;

    [root@localhost ~]# grep -A 1"hadoop" /etc/passwd    
    hadoop:x:3102:3102::/home/hadoop:/bin/bash    
    hive:x:991:986::/home/hive:/bin/bash

-B num:顯示匹配到的行的前n行;

    [root@localhost ~]# grep -B 1 "hadoop" /etc/passwd    
    fedora:x:3101:3101::/home/fedora:/bin/csh    
    hadoop:x:3102:3102::/home/hadoop:/bin/bash

-C num:顯示匹配到行的前后n行;

    [root@localhost ~]# grep -C 2 "hadoop" /etc/passwd    
    mint:x:3100:3100::/home/mint:/bin/bash    
    fedora:x:3101:3101::/home/fedora:/bin/csh    
    hadoop:x:3102:3102::/home/hadoop:/bin/bash    
    hive:x:991:986::/home/hive:/bin/bash    
    linxuejing:x:3103:3103::/home/linxuejing:/bin/bash

-E:相當(dāng)于“egrep”,表示支持?jǐn)U展的正則表達(dá)式(下面會(huì)說(shuō));

-F:支持使用固定字符串,不支持正則表達(dá)式,相當(dāng)于fgrep;

基本正則表達(dá)式元字符:

   (1)字符匹配

           .:匹配任意單個(gè)字符;

          []:匹配范圍內(nèi)的任意單個(gè)字符;

          [^]:匹配范圍外的任意單個(gè)字符;

        [a-z]:所有小寫(xiě)字母;

          [A-Z]:所有大寫(xiě)字母;

          [0-9]:所有數(shù)字;

        [:digit:]:所有的數(shù)字;

          [:lower:]:所有小寫(xiě)字母;

          [:upper:]:所有大寫(xiě)字母;

          [:alpha:]:任意字母(包括大小寫(xiě));

          [:alnum:]:所有字母和數(shù)字;

          [:space:]:空白字符;

          [:punct:]:標(biāo)點(diǎn)符號(hào);

          [:blank:]:空格和Tab鍵;

          [:cntrl:]:所有的控制符(Ctrl+#);

          [:print:]:所有可打印字符;

        可使用man 7 glob查看;

示例:

.:查找/etc/passwd文件中以“r”開(kāi)頭“t”結(jié)尾中間跟了兩個(gè)任意單個(gè)字符的行;

    [root@localhost ~]# grep "r..t" /etc/passwd    
    root:x:0:0:root:/root:/bin/bash    
    operator:x:11:0:operator:/root:/sbin/nologin    
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

[]:查找/tmp/meminfo文件中以S或s開(kāi)頭的行;

    [root@localhost ~]# grep"^[Ss]" /tmp/meminfo     
    SwapCached:           0 kB    
    SwapTotal:      2098172 kB    
    SwapFree:       2098172 kB    
    Shmem:            13128 kB    
    Slab:            234936 kB    
    SReclaimable:    193688 kB    
    SUnreclaim:       41248 kB    
    swap

[a-z]:表示“i”后面根兩個(gè)字符不區(qū)分大小寫(xiě)的行;

[root@localhost ~]# ifconfig | grep -i"i[a-z][a-z]"
eno16777736:flags=4163  mtu1500
       inet 192.168.254.130  netmask 255.255.255.0  broadcast 192.168.254.255
       inet6 fe80::20c:29ff:fe8e:eb7c  prefixlen64  scopeid 0x20
       TX errors 0  dropped 0 overruns0  carrier0  collisions0
lo: flags=73  mtu65536
       inet 127.0.0.1  netmask 255.0.0.0
       inet6::1  prefixlen128  scopeid 0x10
       TX errors 0  dropped 0 overruns0  carrier0  collisions0

[[:alpha:]]:查找文件中以任意字母開(kāi)頭的行;

[root@localhost ~]# grep"^[[:alpha:]]" /tmp/grub2.cfg
set pager=1
LH
if [ -s $prefix/grubenv ]; then
fi
if [ "${next_entry}" ] ; then
else
fi
if [ x"${feature_menuentry_id}" =xy ]; then
else
fi
........

(2)次數(shù)匹配:

   *:匹配其前面的字符任意次(包括0次);

   [root@localhost ~]# grep "x*y"test2.txt
     abcy
     yabcd
     xxxyabc
     abgdsfy
     asdy

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

     [root@localhost ~]# grep "x\+y"test2.txt 
      xxxyabc

    .*:任意長(zhǎng)度的任意字符;

    [root@localhost ~]# grep"x.*y" test2.txt 
    xxxyabc
    xjgbdfg,n,gnjgy9

   \?:匹配前面的字符0次或1次(最多一次),前面的可有可無(wú);

    [root@localhost~]# grep "x\?y" test2.txt 
    abcy
    yabcd
    xxxyabc
    abgdsfy
    asdy
    xjgbdfg,n,gnjgy

    \{m\}:前面的字符精確出現(xiàn)m次,m為非負(fù)數(shù)整數(shù);

  root@localhost~]# grep "x\{2\}" test2.txt
  xxxyabc

 \{m,n\}:前面的字符出現(xiàn)至少m次,至多n次;

    \{m,\}:至少m次,多了不限;

    \{0,n\}:至多n次;

  [root@localhost~]# grep "x\{1,3\}y" test2.txt 
  xxxyabc
  [root@localhost~]# grep "x\{3,\}y" test2.txt 
    xxxyabc
# 顯示“i”后面出現(xiàn)3個(gè)字符;
    [root@localhost~]# ifconfig | grep"i[[:alpha:]]\{3\}"
        inet 192.168.254.130  netmask255.255.255.0  broadcast 192.168.254.255
        inet6 fe80::20c:29ff:fe8e:eb7c prefixlen 64  scopeid0x20
        TX errors 0  dropped 0 overruns 0  carrier 0 collisions 0
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128 scopeid 0x10
        TX errors 0  dropped 0 overruns 0  carrier 0 collisions 0

(3)位置錨定

    限制使用模式搜索文本,限制模式所匹配到的文本只能出現(xiàn)于目標(biāo)文本的哪個(gè)位置;

    ^:行首錨定;用于模式的最左側(cè),^PATTERN

[root@localhost~]# grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
#  顯示以root字符串開(kāi)頭的行;

    $:行尾錨定;用戶模式的最右側(cè),PATTERN$

        ^PATTERN$:整行匹配;

        ^$:空行;也不能有空白字符及Tab鍵;

     ^[[:space:]]*$:查找只有空白字符的行;并統(tǒng)計(jì)有多少行;

[root@localhost~]# grep "^[[:space:]]*$" /etc/grub2.cfg | wc -l
17

    單詞錨定:\

        單詞:由非特殊字符組成的連續(xù)字符都稱為單詞;

[root@localhost ~]# cat test3.txt
root
rootls
rootnkll
openroot
[root@localhost ~]# grep "\" test3.txt
root

        \<或\b:詞首錨定,用于單詞模式的左側(cè),格式為\

[root@localhost~]# grep "\

        \>或\b:詞尾錨定,用于單詞模式的右側(cè),格式為PATTERN\>, PATTERN\b ;

[root@localhost~]# grep "bash\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
mageedu:x:1000:1000:mageedu:/home/mageedu:/bin/bash
gentoo:x:3003:3003::/home/gentoo:/bin/bash
ubuntu:x:3004:4004::/home/ubuntu:/bin/bash
mint:x:3100:3100::/home/mint:/bin/bash
hadoop:x:3102:3102::/home/hadoop:/bin/bash
hive:x:991:986::/home/hive:/bin/bash
linxuejing:x:3103:3103::/home/linxuejing:/bin/bash

練習(xí):

  • 查找“netstat -tan”命令的結(jié)果中,以“LISTEN”后跟0個(gè)或多個(gè)空白字符結(jié)尾的行;

Linun文本搜索之grep及正則表達(dá)式

  • 查找“l(fā)dd /usr/bin/ls”命令的結(jié)果中文件路徑;

Linun文本搜索之grep及正則表達(dá)式

  • 查找/etc/grub2.cfg文件中,以至少一個(gè)空白字符開(kāi)頭,后面又跟了非空白字符的行;

Linun文本搜索之grep及正則表達(dá)式

(4)分組與引用

    \(PATTERN\):將次PATTERN匹配到的字符當(dāng)做一個(gè)整體進(jìn)行處理;

    注意:分組括號(hào)中的模式匹配到的字符會(huì)被正則表達(dá)式引擎自動(dòng)記錄于內(nèi)部的變量中,這些變量是\1,\2,\3,....

    \n:模式中第n個(gè)左括號(hào)以及與之匹配的右括號(hào)之間的模式所匹配到的結(jié)果;

示例:

后向引用:引用前面括號(hào)中的模式所匹配到的字符串;

  • \1表示引用前面模式匹配到的結(jié)果后面加一個(gè)“r”的行;

Linun文本搜索之grep及正則表達(dá)式

二、擴(kuò)展正則表達(dá)式

    egrep:支持使用擴(kuò)展正則表達(dá)式,相當(dāng)于“grep -E”

        擴(kuò)展正則表達(dá)式的元字符:多數(shù)和上面一樣,這里知舉例說(shuō)明不同之處;

            字符匹配:

                .:任意單個(gè)字符;

                []:范圍內(nèi)的任意單個(gè)字符;

                        [^]:范圍外的任意單個(gè)字符;

                    次數(shù)匹配

                *:任意次;

                ?:0次或一次;

root@localhost~]# egrep "x?y" test2.txt
abcy
yabcd
xxxxxxxxyabc
abgdsfy
asdy
xjgbdfg,n,gnjgy

                +:匹配其前面的字符1次或多次;

[root@localhost~]# egrep "x+y" test2.txt
xxxxxxxxyabc

                        {m}:精確匹配m次;

[root@localhost~]# egrep "x{5}y" test2.txt
xxxxxxxxyabc
# 精確匹配前面的字符5次;

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

[root@localhost~]# egrep "x{3,6}y" test2.txt
xxxxxxxxyabc
# 匹配前面的字符至少3次,至多6次;

                    位置錨定:

^:行首

                 $:行尾

                 \<,\b:詞首

                 \>,\b:詞尾

            分組及引用

                (pattern):分組,括號(hào)中的模式匹配到的字符會(huì)被記錄與正則表達(dá)式引擎內(nèi)部的變量中;

Linun文本搜索之grep及正則表達(dá)式

            或者:表示C或者cat;  ls或者LS;

Linun文本搜索之grep及正則表達(dá)式

第一次寫(xiě)博客,寫(xiě)的不是很好,請(qǐng)多多指教。Linun文本搜索之grep及正則表達(dá)式

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


名稱欄目:Linun文本搜索之grep及正則表達(dá)式-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://weahome.cn/article/djodce.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部