日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux之grep

發(fā)布時(shí)間:2025/3/20 linux 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux之grep 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  • 首先介紹一些特殊符號(hào),僅列出常用的幾個(gè)
  • 注意:以中括號(hào)的形式,表示一個(gè)整體

    grep用法講解

    grep (global search regular expression and print the line),以行為單位進(jìn)行信息的提取和分析

    [root@localhost ~]grep [-acinv] [--color=auto] '查找的字符串' filename

    參數(shù)解析:

    -a 將binary文件以text文件的方式查找數(shù)據(jù)

    -c 計(jì)算找到? ?'查找字符串' 次數(shù)

    -i 忽略大小寫,所有的大小寫視為一樣

    -n輸出行號(hào)

    -v 反向選擇,即顯示出沒有? '查找字符串'? 內(nèi)容的那一行

    --color=auto 將關(guān)鍵部分加上顏色顯示,由于高亮提取的數(shù)據(jù)可以使人一目了然,因此為了永久有效,可以在 ~./bashrc? 內(nèi)容里修改,加上alias grep='grep --color=auto'


    再以source命令使其立即生效



    此外關(guān)于grep的還有的其他用法

    [root @localhost ~]# grep [-A] [-B] [--color=auto] '查找字符串' filename

    參數(shù)解析:

    -A 后面可以加數(shù)字,為after之意,-A5表示第5行到最后一行都會(huì)表示出來

    -B 后面可以加數(shù)字,為befer之意,-B5,表示首行到第5行都會(huì)表示出來


    表示關(guān)鍵字 'root'所在行的前2行與'root'所在行的后3行都會(huì)被顯示出來

    關(guān)于正則表達(dá)式的練習(xí):

    1、利用中括號(hào)? [ ]? 查找字符集合

    如果查找的 test 和 tast ,不難發(fā)現(xiàn)這個(gè)兩個(gè)字符串的的區(qū)別是e和a,因此

    [root @localhost tmp] # grep -n 't[ae]st' re.txt


    關(guān)于 [] 里面無論有幾個(gè)字符,都表示只取其中的一個(gè)字符

    如果想查找 'oo' 的字符時(shí),可以

    [root @localhost tmp]# grep -n 'oo' re.txt

    此時(shí)會(huì)找出所有含有oo的字符串的行并予以顯示


    如果不想要goo形式開頭的字符串的行,可以

    [root @localhost tmp]#grep -n '[^g]oo' re.txt

    注意這里的不以 g 開頭的字符串,是 [^g]的形式


    這里10和11行中之所以還有g(shù)oo 的形式,因?yàn)?oo 前還有o,即至少3個(gè)o

    現(xiàn)在找出oo前無小寫字母,使用反向選擇字符 ^

    [rrot @localhost tmp]# grep -n '[^a-z]oo' re.tx

    或者:獲取oo前無小寫字母的形式

    [root @localhost tmp] #grep -n '[^[:lower]]'oo' re.txt


    對(duì)比行首字符 ^:

    [root @localhost tmp] # grep -n '^[a-z]' re.txt找出開頭是小寫字母+oo的形式

    所以一定注意反向選取 ^ 和 行首字符 ^,這里個(gè)符合一樣的,但是放置的位置不同,決定了其意義不同,在[^]表示反向選擇,^[]表示行首的意思

    在一組字符集合中,如果該字符是連續(xù)式,可以使用如[0-9][A-Z][a-z]等方式來書寫

    [root @localhost tmp]# grep -n '[0-9]' re.txt

    當(dāng)然也可以使用特殊字符表示方法

    [root @localhost tmp] # grep -n '[[:digit:]]' re.txt



    2、行尾字符 $

    想要查找以 .為行尾的那一行

    [root @localhost tmp] #grep -n '\.$' re.txt

    注意這里之所以 \. ,是因?yàn)?. 還有其他含義,這里使用轉(zhuǎn)義字符使其成為普通字符

    顯示空白行

    [root @localhost tmp]# grep '^$' re.txt

    3、任意一個(gè)字符 . 和重復(fù)字符*

    在bash中,知道通配符* 可以用來表示0個(gè)或任意個(gè)字符,但是正則表達(dá)式不是通配符,兩者之間是不同的,正則表達(dá)式中 “.”表示肯定有一個(gè)任意字符,* 表示重復(fù)前一個(gè)字符 0次或者多次,為組合形態(tài)

    [rroot @localhost tmp]# grep -n 'g..d' re.txt

    表示在字母g和d之前一定有兩個(gè)字符


    查找至少含有兩個(gè) o,即 oo的字符串的行,注意 o* 表示具有空字符或者一個(gè)以上的o,因此兩個(gè)oo,則要表示為 ooo*,一定要注意


    所以, .* 表示0個(gè)或者任意多個(gè)字符


    在 g 和 g 之前的所有字符串所在的行都表示出來

    正確理解 [0-9][0-9]* 與 [0-9] 的含義


    4、限定連續(xù)re字符范圍{}

    如果想找到2-5的o連續(xù)字符串,此時(shí)需要用到限定范圍的字符{},因?yàn)?“{” 和 “}”的符號(hào)在shell中石油特殊含義的,因此這里需要轉(zhuǎn)義 \ 使其失去特殊意義,這里找到兩個(gè)o

    [root @localhost tmp]# grep -n 'o\{2\}' re.txt

    找到2個(gè)到5個(gè)的o字符

    [root @localhost tmp]# grep -n 'o\{2,5\}' re.txt

    如果是找到2個(gè)以上的o怎么辦呢?

    [root @localhost tmp]# grep -n 'o\{2,\}' re.txt


    如果要去掉空白行和以#開頭的注釋行

    [root @localhost tmp]#grep -n '^$' re.txt | grep -n '^#'

    使用grep進(jìn)行兩次查找,如果使用擴(kuò)展性表達(dá)式,則可以進(jìn)行一次性操作就可以,大大簡化了操作,這里是 egrep

    [root @localhost tmp]#egrep -v '^$ | #' re.txt

    這里介紹幾種常見的擴(kuò)展性正則表達(dá)式的用法

    a.? ?+? ? ?重復(fù)一個(gè)或一個(gè)以上的錢一個(gè)RE的字符,如果查找god,good,goood,發(fā)現(xiàn)o為一個(gè)以上,因此可以使用o+

    [root @localhost tmp]#egrep -n 'go+d' re.txt

    b.? ?? ? ? 零個(gè)或一個(gè)的前一個(gè)RE字符

    [root @localhost tmp]# egrep -n 'go?d' re.txt

    上述兩種用法,不難發(fā)現(xiàn)兩者的和為? 'go*d' 的形式

    c.? ? |? ? ? ?或的形式,找出數(shù)個(gè)字符串,查找 god 和 good 兩個(gè)字符串

    [root @localhost tmp]#egrep -n 'gd|good' re.txt

    d.? ?()? ? ? ?找出組字符串,如果想要找出 god 和 glad ,由于差別在 o 和 la,因此結(jié)合 | 的用法

    [root @localhost tmp]#egrep -n 'g(o|la)d' re.txt

    e.? ?()+? ? 多個(gè)重復(fù)組的判別,查找AxyxyxyxyxyzC,發(fā)現(xiàn)xy一直在重復(fù),因此

    [root @localhost tmp]#egrep -n 'A(xy)+zC' re.txt





    總結(jié)

    以上是生活随笔為你收集整理的Linux之grep的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。