• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            七種武器:grep

            Posted on 2009-10-13 17:05 Prayer 閱讀(520) 評論(0)  編輯 收藏 引用 所屬分類: Shell

            grep的功能

            grep從一個或多個文本文件中查找符合指定范本(正則表達式)的行,并把查找結果輸出到指定設備(默認到屏幕)。

            語法:

            /usr/bin/grep [選項] <范本(正則表達式)> [文件1 ...]

            范本是一個單獨的詞或者是一個用引號括起來的字符串。如果范本包含空格,則范本要用引號括起來。grep默認下把結果輸出到屏幕但是并不影響或改變任何被查找的目標文件。
            一些特殊字符($, *, [, ^, |, (, ), 和\)的使用要特別小心,因為這些字符在shell里有特殊意義。如果這些字符作為范本的一部份,請用單引號把整個范式括起來。
            # grep root /etc/passwd /etc/shadow
            /etc/passwd:root:x:0:0:Super-User:/:/sbin/sh
            /etc/shadow:root:PdhpgiTZvqa2:13732::::::

            備注:黑體部分是文件名

            grep命令的輸入

            grep有三種輸入來源:標準輸入(鍵盤)、管道和文件。如果你忘了輸入目標文件,grep會假定從標準輸入設備(鍵盤)取得輸入,直到你按^D(Control+D)。如果是管道,上個命令的輸出將被作為grep的輸入被處理,并把查找結果輸出到指定輸出設備。
            global$grep mypattern
            hello grep
            I forget input file(s)
            ^D
            global$

            global$ ps -ef | grep root

            global$ grep root /etc/passwd /etc/shadow


            grep命令的返回值(不是查找結果)

            ### 0 (范本在指定文件里被查找到。)
            global$grep root /etc/passwd;echo $?
            root:x:0:0:Super-User:/:/sbin/sh
            0

            ### 1 (范本在指定文件里沒有查找到)
            global$grep roo1t /etc/passwd;echo $?
            1

            ### 2 (指定的目標文件不存在)
            global$grep root /etc/passwd1;echo $?
            grep: can't open /etc/passwd1
            2

            備注:Bourn/Korn shell變量,?,返回最后被執行的命令的返回值;C shell變量是status。

            grep命令的選項

            選項
            描述
            -c
            顯示符合范本的行的數目而不是顯示滿足條件的行的內容
            -h
            不顯示文件名
            -i
            忽略大小寫
            -l
            只列出有滿足條件的行的文件的文件名
            -n
            顯示滿足條件的行在包含它的文件中的行號
            -s
            隱形操作,即如果出錯不輸出任何信息。在用于只檢返回值時非常有用。
            -v
            反向顯示,即輸出不滿足條件的行。

            grep的正則表達式的元字符

            元字符
            功能
            列子
            描述
            ^
            行首
            '^love'
            匹配所有以love開始的行
            $
            行尾
            'love$'
            匹配所有以love結尾的行
            .(點)
            匹配任意一個字符
            'l..e'
            匹配所有包含l,緊跟任意2個字符,再跟一個e的行
            *
            匹配0個或多個字符
            ' *love'
            匹配所有包含0個或多個空格,再跟love的行
            []
            匹配一個在集合里的字符
            '[Ll]ove'
            匹配包含Love或love的行
            [^]
            匹配一個不在集合里的字符
            '[^A-K]ove'
            匹配不包含從A-K的字符,緊跟ove的行
            \<
            詞首
            '\<love'
            匹配所有有任一單詞以love為首的行
            \>
            詞尾
            'love\>'
            匹配所有有任一單詞以love為尾的行
            \(..\)
            標識匹配的一個或多個字符
            '\(love\)ing'
            標識一個標注以期后面引用,第一個用\1,一次類推,最多有9個;見列子
            x\{m\}
            x\{m,\}
            x\{m,n\}
            重復字符x:m次
            至少m次
            在m次到n次之間
            '0\{5\}'
            '0\{5,\}'
            '0\{5,10\}
            如果一個行有:連續5個0,至少連續5個0,連續的0在5到10之間,則滿足要求。

            例子

            • 查找在/etc下以p為首的文件中有那些行包含有root
            # 、/usr/bin/grep root /etc/p*
            /etc/passwd:root:x:0:0:Super-User:/:/sbin/sh
            /etc/project:user.root:1::::

            • 輸出所有的非空行
            $ /usr/bin/grep . $HOME.profile

            $ /usr/bin/grep ^$ /etc/passwd | wc -l (本命令統計/etc/passwd里有幾行空行)

            • 輸出/etc/passwd中包含root或者sys的行
            $/usr/xpg4/bin/grep -e 'root' -e 'sys' /etc/passwd  或者
            $/usr/xpg4/bin/grep -E 'root|sys' /etc/passwd
            root:x:0:0:Super-User:/:/sbin/sh
            sys:x:3:3::/:


            • 輸出所有行,此行包含這樣的一個單詞,它以小寫字母打頭,緊跟任意個字符,以n結尾
            $ grep '\<[a-z].*n\>' /etc/passwd (注意.*,它表示任意個字符,包括空格)

            • 輸出行,它包含一個3,緊跟著一個點和一個數字,再緊跟任意個字符(.*),再跟一個3(前面標識過了),一個或多個TAB,再跟一個3. 因為3前面被標識過,\(3\),所以后面引用只要用\1就可以了。
            $ grep '\(3\)\.[0-9].*\1   *\1' /etc/passwd

            注:你可以替換3為任意你想要的其他字符
            • 輸出行,這些行有單詞至少包含9個連續的小寫字母
            $grep '[a-z]\{9,\}' /etc/passwd

            • 輸出當前目錄下文件名,這些文件包含有這樣子的行,這些行包含有'SE'字符串,忽略大小寫。
            $ grep -l -i 'se' *

            egrep(擴展的grep)

            元字符
            功能
            例子
            描述
            +
            匹配一個或多個前導字符
            '[a-z]+ove'
            匹配一個或多個小寫字符,緊跟ove.如love,loove,alove

            匹配0個或一個前導字符
            'lo?ve'
            匹配以l開始,緊跟零個o或者一個o,在跟ve.如lve,love
            a|b
            匹配a或者b
            'love|hate'
            匹配love或者hate
            ()
            分組
            'lov(able|ly)?'
            匹配lovable或者lovly,或者lov
            • 包含S,緊跟h或者u
            $ egrep 'S(h|u)' /etc/passwd
            无码人妻久久一区二区三区免费丨| 女人香蕉久久**毛片精品| 亚洲国产精品狼友中文久久久| 久久综合久久综合亚洲| 久久精品夜夜夜夜夜久久| 久久电影网2021| 久久久无码精品亚洲日韩蜜臀浪潮| 久久亚洲精品中文字幕| 久久久久无码精品| 亚洲欧美伊人久久综合一区二区| 99久久精品午夜一区二区| 亚洲午夜无码AV毛片久久| 丁香狠狠色婷婷久久综合| 久久91精品国产91| 国产高清国内精品福利99久久| 18禁黄久久久AAA片| 久久国产香蕉视频| 久久99国产综合精品女同| 香港aa三级久久三级老师2021国产三级精品三级在 | 亚洲欧美国产日韩综合久久| 欧美喷潮久久久XXXXx| 青青青青久久精品国产h久久精品五福影院1421 | 伊人久久大香线蕉影院95| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 日韩美女18网站久久精品| 久久成人精品视频| 久久99精品久久久久久久不卡| 伊人久久大香线蕉无码麻豆| 成人午夜精品久久久久久久小说| 麻豆亚洲AV永久无码精品久久| 久久青青色综合| 国产精品久久久久a影院| 蜜桃麻豆www久久国产精品| 青青热久久综合网伊人| 久久精品国产影库免费看| 国内精品久久久久久99| 精品免费久久久久久久| 久久亚洲私人国产精品| 国产一区二区三区久久| 欧美综合天天夜夜久久| 99久久伊人精品综合观看|