grep_grep命令 - CSDN
grep 订阅
grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。Windows系统下类似命令FINDSTR。 [1] 展开全文
grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。Windows系统下类似命令FINDSTR。 [1]
信息
最新版本
3.0 [3]
原作者
Ken Thompson [2]
公开时间
1974 [4]
外文名
Globally search a Regular Expression and Print
GREP基本简介
egrep和fgrep的命令只跟grep有很小不同。egrep和fgrep都是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。Grep命令中允许指定的串语句是一个规则表达式,这是一种允许使用某些特殊键盘字符的指定字符串的方法,这种方法中的特殊键盘字符可以用于代表其他字符也可以进一步定义模式匹配工作方式。例如:grep ".*hood" essay1。该命令将在文件essay1中搜索,显示出包含带有字符串hood的字的每一行。命令行中的点表示的是hood之前可以有任意字符,星号指的是在字符串之前点号所表示的任意字符可以有任意个(其中的双引号是可有可无的,但是当语句中包含短语或者空格时就必须加双引号)。 [5] 
收起全文
  • Linux中grep命令详解

    万次阅读 多人点赞 2019-04-07 21:48:40
    grep命令 grep 1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限...

    grep命令    
        grep
        1.作用
        Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
        grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
        2.格式及主要参数
        grep [options]
        主要参数:  grep --help可查看
            -c:只输出匹配行的计数。
            -i:不区分大小写。
            -h:查询多文件时不显示文件名。
            -l:查询多文件时只输出包含匹配字符的文件名。
            -n:显示匹配行及 行号。
            -s:不显示不存在或无匹配文本的错误信息。
            -v:显示不包含匹配文本的所有行。
            --color=auto :可以将找到的关键词部分加上颜色的显示。
        pattern正则表达式主要参数:
        \: 忽略正则表达式中特殊字符的原有含义。
        ^:匹配正则表达式的开始行。
        $: 匹配正则表达式的结束行。
        \<:从匹配正则表达 式的行开始。
        \>:到匹配正则表达式的行结束。
        [ ]:单个字符,如[A]即A符合要求 。
        [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
        .:所有的单个字符。
        *:所有字符,长度可以为0。
        3.grep命令使用简单实例
        itcast$ grep ‘test’ d*
        显示所有以d开头的文件中包含 test的行

        itcast $ grep ‘test’ aa bb cc
        显示在aa,bb,cc文件中匹配test的行。

        itcast $ grep ‘[a-z]\{5\}’ aa
        显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

        itcast $ grep ‘w\(es\)t.*\1′ aa
            如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
        4.grep命令使用复杂实例
        明确要求搜索子目录:
        grep -r
        或忽略子目录
        grep -d skip
        如果有很多输出时,您可以通过管道将其转到’less’上阅读:
        itcast$ grep magic /usr/src/Linux/Documentation/* | less
        这样,您就可以更方便地阅读。
        有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 ,然后再试。
        下面还有一些有意思的命令行参数:
        grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
        grep -l pattern files :只列出匹配的文件名,
        grep -L pattern files :列出不匹配的文件名,
        grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
        grep -C number pattern files :匹配的上下文分别显示[number]行,
        grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
        例如:grep "abc\|xyz" testfile 表示过滤包含abc或xyz的行
        grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
        grep -n pattern files 即可显示行号信息
        grep -c pattern files 即可查找总行数
        还有些用于搜索的特殊符号:\< 和 \> 分别标注单词的开始与结尾。
        例如:
        grep man * 会匹配 ‘Batman’、’manic’、’man’等,
        grep ‘\<man’ * 匹配’manic’和’man’,但不是’Batman’,
        grep ‘\<man\>’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
        ‘^’: 指匹配的字符串在行首,
        ‘$’: 指匹配的字符串在行 尾,
        
        用grep查找结构体 grep -R "struct task_struct {" /usr/src 加-n可以显示行号
    PS1=$ 进入到家目录在.bashrc    中

    展开全文
  • Grep命令的详细使用方法

    万次阅读 2017-07-23 10:19:22
    linux grep命令1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是...
    linux grep命令
    <div fc05="" fc11="" nbw-blog="" ztag="" js-fs2"="">
    1.作用
    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
    2.格式
    grep [options]
    3.主要参数
    [options]主要参数:
    -c:只输出匹配行的计数。
    -I:不区分大 小写(只适用于单字符)。
    -h:查询多文件时不显示文件名。
    -l:查询多文件时只输出包含匹配字符的文件名。
    -n:显示匹配行及 行号。
    -s:不显示不存在或无匹配文本的错误信息。
    -v:显示不包含匹配文本的所有行。
    pattern正则表达式主要参数:
    \: 忽略正则表达式中特殊字符的原有含义。
    ^:匹配正则表达式的开始行。
    $: 匹配正则表达式的结束行。
    \<:从匹配正则表达 式的行开始。
    \>:到匹配正则表达式的行结束。
    [ ]:单个字符,如[A]即A符合要求 。
    [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
    。:所有的单个字符。
    * :有字符,长度可以为0。
    4.grep命令使用简单实例
    $ grep ‘test’ d*
    显示所有以d开头的文件中包含 test的行。
    $ grep ‘test’ aa bb cc
    显示在aa,bb,cc文件中匹配test的行。
    $ grep ‘[a-z]\{5\}’ aa
    显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
    $ grep ‘w\(es\)t.*\1′ aa
    如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
    5.grep命令使用复杂实例
    假设您正在’/usr/src/Linux/Doc’目录下搜索带字符 串’magic’的文件:
    $ grep magic /usr/src/Linux/Doc/*
    sysrq.txt:* How do I enable the magic SysRQ key?
    sysrq.txt:* How do I use the magic SysRQ key?
    其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。
    默认情况下,’grep’只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出:
    grep: sound: Is a directory
    这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法:
    明确要求搜索子目录:grep -r
    或忽略子目录:grep -d skip
    如果有很多 输出时,您可以通过管道将其转到’less’上阅读:
    $ grep magic /usr/src/Linux/Documentation/* | less
    这样,您就可以更方便地阅读。
    有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 <CTRL c> ,然后再试。
    下面还有一些有意思的命令行参数:
    grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
    grep -l pattern files :只列出匹配的文件名,
    grep -L pattern files :列出不匹配的文件名,
    grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
    grep -C number pattern files :匹配的上下文分别显示[number]行,
    grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
    grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
    grep -n pattern files 即可显示行号信息
    grep -c pattern files 即可查找总行数
    这里还有些用于搜索的特殊符号:
    \< 和 \> 分别标注单词的开始与结尾。
    例如:
    grep man * 会匹配 ‘Batman’、’manic’、’man’等,
    grep ‘\<man’ * 匹配’manic’和’man’,但不是’Batman’,
    grep ‘\<man\>’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
    ‘^’:指匹配的字符串在行首,
    ‘$’:指匹配的字符串在行 尾,

    Grep 命令 用法大全
    1、 参数:
    -I :忽略大小写
    -c :打印匹配的行数
    -l :从多个文件中查找包含匹配项
    -v :查找不包含匹配项的行
    -n:打印包含匹配项的行和行标

    2、RE(正则表达式)
    \ 忽略正则表达式中特殊字符的原有含义
    ^ 匹配正则表达式的开始行
    $ 匹配正则表达式的结束行
    \< 从匹配正则表达式的行开始
    \> 到匹配正则表达式的行结束
    [ ] 单个字符;如[A] 即A符合要求
    [ - ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
    . 所有的单个字符
    * 所有字符,长度可以为0

    3、举例
    # ps -ef | grep in.telnetd
    root 19955 181 0 13:43:53 ? 0:00 in.telnetd

    # more size.txt size文件的内容
    b124230
    b034325
    a081016
    m7187998
    m7282064
    a022021
    a061048
    m9324822
    b103303
    a013386
    b044525
    m8987131
    B081016
    M45678
    B103303
    BADc2345

    # more size.txt | grep '[a-b]' 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
    b124230
    b034325
    a081016
    a022021
    a061048
    b103303
    a013386
    b044525
    # more size.txt | grep '[a-b]'*
    b124230
    b034325
    a081016
    m7187998
    m7282064
    a022021
    a061048
    m9324822
    b103303
    a013386
    b044525
    m8987131
    B081016
    M45678
    B103303
    BADc2345

    # more size.txt | grep 'b' 单个字符;如[A] 即A符合要求
    b124230
    b034325
    b103303
    b044525
    # more size.txt | grep '[bB]'
    b124230
    b034325
    b103303
    b044525
    B081016
    B103303
    BADc2345

    # grep 'root' /etc/group
    root::0:root
    bin::2:root,bin,daemon
    sys::3:root,bin,sys,adm
    adm::4:root,adm,daemon
    uucp::5:root,uucp
    mail::6:root
    tty::7:root,tty,adm
    lp::8:root,lp,adm
    nuucp::9:root,nuucp
    daemon::12:root,daemon

    # grep '^root' /etc/group 匹配正则表达式的开始行
    root::0:root

    # grep 'uucp' /etc/group
    uucp::5:root,uucp
    nuucp::9:root,nuucp

    # grep '\<uucp' /etc/group
    uucp::5:root,uucp

    # grep 'root$' /etc/group 匹配正则表达式的结束行
    root::0:root
    mail::6:root

    # more size.txt | grep -i 'b1..*3' -i :忽略大小写

    b124230
    b103303
    B103303

    # more size.txt | grep -iv 'b1..*3' -v :查找不包含匹配项的行

    b034325
    a081016
    m7187998
    m7282064
    a022021
    a061048
    m9324822
    a013386
    b044525
    m8987131
    B081016
    M45678
    BADc2345

    # more size.txt | grep -in 'b1..*3'
    1:b124230
    9:b103303
    15:B103303

    # grep '$' /etc/init.d/nfs.server | wc -l
    128
    # grep '\$' /etc/init.d/nfs.server | wc –l 忽略正则表达式中特殊字符的原有含义

    15
    # grep '\$' /etc/init.d/nfs.server
    case "$1" in
    >/tmp/sharetab.$$
    [ "x$fstype" != xnfs ] &&
    echo "$path\t$res\t$fstype\t$opts\t$desc"
    >>/tmp/sharetab.$$
    /usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab.$$
    /usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab
    if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)'
    if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] &&
    if [ $startnfsd -ne 0 ]; then
    elif [ ! -n "$_INIT_RUN_LEVEL" ]; then
    while [ $wtime -gt 0 ]; do
    wtime=`expr $wtime - 1`
    if [ $wtime -eq 0 ]; then
    echo "Usage: $0 { start | stop }"

    # more size.txt

    the test file
    their are files
    The end

    # grep 'the' size.txt
    the test file
    their are files

    # grep '\<the' size.txt
    the test file
    their are files

    # grep 'the\>' size.txt
    the test file

    # grep '\<the\>' size.txt
    the test file

    # grep '\<[Tt]he\>' size.txt
    the test file

    ==================================================================

    1,简介
    使用正则表达式的一个多用途文本搜索工具.这个php?name=%C3%FC%C1%EE" οnclick="tagshow(event)" class="t_tag">命令本来是ed行编辑器中的一个php?name=%C3%FC%C1%EE" οnclick="tagshow(event)" class="t_tag">命令/过滤器:
    g/re/p -- global - regular expression - print.
    基本格式
    grep pattern [file...]
    (1)grep 搜索字符串 [filename]
    (2)grep 正则表达式 [filename]
    在文件中搜索所有 pattern 出现的位置, pattern 既可以是要搜索的字符串,也可以是一个正则表达式.
    注意:在输入要搜索的字符串时最好使用双引号/而在模式匹配使用正则表达式时,注意使用单引号

    2,grep的选项
    -c 只输出匹配行的计数
    -i 不区分大小写(用于单字符)
    -n 显示匹配的行号
    -v 不显示不包含匹配文本的所以有行
    -s 不显示错误信息
    -E 使用扩展正则表达式
    更多的选项请查看:man grep

    3,常用grep实例

    (1)多个文件查询
    grep "sort" *.doc #见文件名的匹配

    (2)行匹配:输出匹配行的计数
    grep -c "48" data.doc #输出文档中含有48字符的行数

    (3)显示匹配行和行数
    grep -n "48" data.doc #显示所有匹配48的行和行号

    (4)显示非匹配的行
    grep -vn "48" data.doc #输出所有不包含48的行

    (4)显示非匹配的行
    grep -vn "48" data.doc #输出所有不包含48的行

    (5)大小写敏感
    grep -i "ab" data.doc #输出所有含有ab或Ab的字符串的行

    4, 正则表达式的应用

    (1)正则表达式的应用 (注意:最好把正则表达式用单引号括起来)
    grep '[239].' data.doc #输出所有含有以2,3或9开头的,并且是两个数字的行

    (2)不匹配测试
    grep '^[^48]' data.doc #不匹配行首是48的行

    (3)使用扩展模式匹配
    grep -E '219|216' data.doc

    (4) ...
    这需要在实践中不断应用和总结,熟练掌握正则表达式。

    5, 使用类名
    可以使用国际模式匹配的类名:
    [[:upper:]] [A-Z]
    [[:lower:]] [a-z]
    [[:digit:]] [0-9]
    [[:alnum:]] [0-9a-zA-Z]
    [[:space:]] 空格或tab
    [[:alpha:]] [a-zA-Z]

    (1)使用
    grep '5[[:upper:]][[:upper:]]' data.doc #查询以5开头以两个大写字母结尾的行

    展开全文
  • grep:字符串查找

    万次阅读 2012-09-25 10:44:54
    引自:... 1. grep简介  grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并

    1. grep简介

        grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

        grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。

        grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

    2. grep正则表达式元字符集(基本集)

    ^        :锚定行的开始 如:'^grep'匹配所有以grep开头的行
    $        :锚定行的结束 如:'grep$'匹配所有以grep结尾的行
    .        :匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
    *        :匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
    []       :匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
    [^]      :匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
    \(..\) :标记匹配字符,如'\(love\)',love被标记为1。
    \<      :锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
    \>       :锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
    x\{m\}   :重复字符x,m次,如:'o\{5\}'匹配包含5个o的行。
    x\{m,\} :重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
    x\{m,n\} :重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5-10个o的行。
    \w       :匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
    \W       :\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
    \b       :单词锁定符,如: '\bgrepb\'只匹配grep。

    3. 用于egrep和 grep -E的元字符扩展集

    +        :匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。
    ?        :匹配零个或多个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。
    a|b|c    :匹配a或b或c。如:grep|sed匹配grep或sed
    ()       :分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。
    x{m},x{m,},x{m,n} :作用同x\{m\},x\{m,\},x\{m,n\}

    4. POSIX字符类

        为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。

    [:alnum:] :文字数字字符
    [:alpha:] :文字字符
    [:digit:] :数字字符
    [:graph:] :非空字符(非空格、控制字符)
    [:lower:] :小写字符
    [:cntrl:] :控制字符
    [:print:] :非空字符(包括空格)
    [:punct:] :标点符号
    [:space:] :所有空白字符(新行,空格,制表符)
    [:upper:] :大写字符
    [:xdigit:] :十六进制数字(0-9,a-f,A-F)

    5. Grep命令选项

       -a或--text    不要忽略二进制的数据。
       -A   <显示列数>或--after-context=<显示列数>    除了显示符合范本样式的那一列之外,并显示该列之后的内容。
       -b或--byte-offset    在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。
       -B<显示列数>或--before-context=<显示列数>    除了显示符合范本样式的那一列之外,并显示该列之前的内容。
       -c或--count    计算符合范本样式的列数。
       -C<显示列数>或--context=<显示列数>或-<显示列数>    除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
       -d<进行动作>或--directories=<进行动作>    当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
       -e<范本样式>或--regexp=<范本样式>    指定字符串做为查找文件内容的范本样式。
       -E或--extended-regexp    将范本样式为延伸的普通表示法来使用。
       -f<范本文件>或--file=<范本文件>    指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。
       -F或--fixed-regexp    将范本样式视为固定字符串的列表。
       -G或--basic-regexp    将范本样式视为普通的表示法来使用。
       -h或--no-filename    在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
       -H或--with-filename    在显示符合范本样式的那一列之前,表示该列所属的文件名称。
       -i或--ignore-case    忽略字符大小写的差别。
       -l或--file-with-matches    列出文件内容符合指定的范本样式的文件名称。
       -L或--files-without-match    列出文件内容不符合指定的范本样式的文件名称。
       -n或--line-number    在显示符合范本样式的那一列之前,标示出该列的列数编号。
       -q或--quiet或--silent    不显示任何信息。
       -r或--recursive    此参数的效果和指定“-d recurse”参数相同。
       -s或--no-messages    不显示错误信息。
       -v或--revert-match    反转查找。
       -V或--version    显示版本信息。
       -w或--word-regexp    只显示全字符合的列。
       -x或--line-regexp    只显示全列符合的列。
       -y    此参数的效果和指定“-i”参数相同。
       --help    在线帮助。

    6. 实例

        要用好grep这个工具,其实就是要写好正则表达式,下面列几个例子,讲解正则表达式的写法。

    $ ls -l | grep '^a'
        通过管道过滤ls -l输出的内容,只显示以a开头的行。
    $ grep 'test' d*
        显示所有以d开头的文件中包含test的行。
    $ grep 'test' aa bb cc
        显示在aa,bb,cc文件中匹配test的行。
    $ grep '[a-z]\{5\}' aa
        显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
    $ grep 'w\(es\)t.*\1' aa
        如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。

        再讲解一个具体应用的例子。
        查询所有位于当前目录下的.cs文件中的Main,通过grep,可以轻松快速地完成这项任务,命令如下:

    grep ‘Main’ *.cs
    输出结果为:
    ChineseDemo.cs: public static void Main()
    RegDemo1.cs: static void Main(string[] args)
    RegDemo2.cs:   public static void Main()
    RegDemo3.cs: public static void Main()

        可见,通过grep真的可以找到相关目录中符合条件的所有文件,并能打印出查询到的字符串所位于的那行内容。如果只想确定哪些文件含有Main,而不需打印相应行的内容,那么可以使用以下命令:?

    grep –l ‘Main’ *.cs
    输出结果为:
    ChineseDemo.cs
    RegDemo1.cs
    RegDemo2.cs
    RegDemo3.cs

    只有相应的文件名称被显示。

        在找到了含有Main字符串的几个文件后,如果想粗略地查看某一具体文件的里源代码的相关信息,比如查看RegDemo1.cs文件中含有Main这一行的前后三行,相关的命令如下:

    grep –C 3 ‘Main’ RegDemo1.cs

    输出结果为:
    class GroupingApp
    {
       static void Main(string[] args)
        {
          
    Reg7();
    }

    输出结果完全符合需求,static void Main(string[] args)这一行前后三行范围内的所有代码被全部打印出来(第一行是空行)。

        以上的查询字符串没有对查找结果是否为一个完整的单词进行限制,也就是说TheMain和Main_Func都会被认定为查询目标。如果想限定该查询字符串为一个完整单词,那么可以使用\w参数,相关命令如下:

    grep –w ‘Main’ *.cs

    结果为:
    ChineseDemo.cs: public static void Main()
    RegDemo1.cs: static void Main(string[] args)
    RegDemo2.cs: public static void Main()
    RegDemo3.cs: public static void Main()

    展开全文
  • Linux 日志查看 | grep 命令

    万次阅读 2019-03-30 14:52:29
    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 语法 grep [-...

    概述


    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

    语法


    grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
    

    参数


    -a或--text 不要忽略二进制的数据。
    -A<显示列数>或--after-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之后的内容。
    -b或--byte-offset 在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。
    -B<显示列数>或--before-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前的内容。
    -c或--count 计算符合范本样式的列数。
    -C<显示列数>或--context=<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
    -d<进行动作>或--directories=<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
    -e<范本样式>或--regexp=<范本样式> 指定字符串做为查找文件内容的范本样式。
    -E或--extended-regexp 将范本样式为延伸的普通表示法来使用。
    -f<范本文件>或--file=<范本文件> 指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。
    -F或--fixed-regexp 将范本样式视为固定字符串的列表。
    -G或--basic-regexp 将范本样式视为普通的表示法来使用。
    -h或--no-filename 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
    -H或--with-filename 在显示符合范本样式的那一列之前,表示该列所属的文件名称。
    -i或--ignore-case 忽略字符大小写的差别。
    -l或--file-with-matches 列出文件内容符合指定的范本样式的文件名称。
    -L或--files-without-match 列出文件内容不符合指定的范本样式的文件名称。
    -n或--line-number 在显示符合范本样式的那一列之前,标示出该列的列数编号。
    -q或--quiet或--silent 不显示任何信息。
    -r或--recursive 此参数的效果和指定"-d recurse"参数相同。
    -s或--no-messages 不显示错误信息。
    -v或--revert-match 反转查找。
    -V或--version 显示版本信息。
    -w或--word-regexp 只显示全字符合的列。
    -x或--line-regexp 只显示全列符合的列。
    -y 此参数的效果和指定"-i"参数相同。
    --help 在线帮助。
    

    grep命令常见用法


    使用的日志文件内容查看:日志文件

    在多个文件中搜索一个单词,命令会返回一个包含**“match_pattern”**的文本行

    语法:

    grep match_pattern file_1 file_2 file_3 ...
    grep "match_pattern" file_1 file_2 file_3 ...
    

    示例:

    [root@peipei3514 usr]# grep AM test.log test2.log 
    test.log:74 2018-05-14 13:52:13:712 SAMNR
    test.log:183 2018-08-31 15:41:05:723 AMMBX
    test2.log:282 2018-12-08 20:11:23:788 VAMDF
    test2.log:292 2018-12-18 20:21:27:789 IMAMV
    [root@peipei3514 usr]# grep "AM" test.log test2.log 
    test.log:74 2018-05-14 13:52:13:712 SAMNR
    test.log:183 2018-08-31 15:41:05:723 AMMBX
    test2.log:282 2018-12-08 20:11:23:788 VAMDF
    test2.log:292 2018-12-18 20:21:27:789 IMAMV
    
    输出除**“match_pattern”**之外的所有行 -v 选项

    语法:

    grep -v "match_pattern" file_name
    

    输出内容太多,就不粘贴了。

    标记匹配颜色 --color=auto 选项

    语法:

    grep "match_pattern" file_name --color=auto
    

    示例:
    这里写图片描述

    使用正则表达式 -E 选项

    语法:

    grep -E "[1-9]+"egrep "[1-9]+"
    

    示例:搜索以数字9开头的行

    [root@peipei3514 usr]# grep -E "^9" test.log 
    9 2018-03-10 12:47:16:702 OEVDO
    90 2018-05-30 14:08:19:713 EADRP
    91 2018-05-31 14:09:10:714 ABJKY
    92 2018-06-01 14:10:19:714 NRISH
    93 2018-06-02 14:11:16:714 JGWFA
    94 2018-06-03 14:12:09:714 KFIPP
    95 2018-06-04 14:13:11:714 UXWRN
    96 2018-06-05 14:14:10:714 BQREG
    97 2018-06-06 14:15:20:714 XUOLW
    98 2018-06-07 14:16:13:714 QMOGZ
    99 2018-06-08 14:17:19:714 VDDZY
    
    只输出文件中匹配到的部分 -o 选项

    语法:

    grep -o match_pattern file_name
    

    示例:

    [root@peipei3514 usr]# grep -o AM test.log
    AM
    AM
    [root@peipei3514 usr]# echo this is a test line. | grep -o -E "[a-z]+\."
    line.
    [root@peipei3514 usr]# echo this is a test line. | egrep -o "[a-z]+\."
    line.
    
    统计文件或者文本中包含匹配字符串的行数 -c 选项

    语法:

    grep -c "text" file_name
    

    示例:

    [root@peipei3514 usr]# grep AM test.log
    74 2018-05-14 13:52:13:712 SAMNR
    183 2018-08-31 15:41:05:723 AMMBX
    [root@peipei3514 usr]# grep -c AM test.log
    2
    
    输出包含匹配字符串的行数 -n 选项

    语法:

    grep "text" -n file_name
    或
    cat file_name | grep "text" -n
    
    #多个文件
    grep "text" -n file_1 file_2
    

    示例:

    [root@peipei3514 usr]# grep AM test.log
    74 2018-05-14 13:52:13:712 SAMNR
    183 2018-08-31 15:41:05:723 AMMBX
    [root@peipei3514 usr]# grep -n AM test.log
    77:74 2018-05-14 13:52:13:712 SAMNR
    186:183 2018-08-31 15:41:05:723 AMMBX
    
    打印样式匹配所位于的字符或字节偏移

    语法:

    grep "text" -b file_name
    

    示例:

    [root@peipei3514 usr]# grep -b AM test.log
    2480:74 2018-05-14 13:52:13:712 SAMNR
    6269:183 2018-08-31 15:41:05:723 AMMBX
    [root@peipei3514 usr]# grep -b -o AM test.log
    2508:AM
    6297:AM
    [root@peipei3514 usr]# echo gun is not unix | grep -b -o "not"
    7:not
    
    #一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 -b -o 一般总是配合使用。
    
    搜索多个文件并查找匹配文本在哪些文件中

    语法:

    grep -l "text" file1 file2 file3...
    

    示例:

    [root@peipei3514 usr]# grep -l AB test.log test2.log 
    test.log
    [root@peipei3514 usr]# grep -l AM test.log test2.log 
    test.log
    test2.log
    

    grep递归搜索文件


    改变一下目录结构:

    [root@peipei3514 usr]# tree logs
    logs
    ├── sublogs
    │   ├── subsublogs
    │   │   └── test5.log
    │   ├── test3.log
    │   └── test4.log
    ├── test2.log
    └── test.log
    
    2 directories, 5 files
    
    在多级目录中对文本进行递归搜索

    语法:

    grep "text" . -r
    # .表示当前目录。
    

    示例:
    这里写图片描述

    忽略匹配样式中的字符大小写

    语法:

    grep "text" . -i
    

    示例:

    [root@peipei3514 logs]# grep "am" test.log
    [root@peipei3514 logs]# grep "am" test.log -i
    74 2018-05-14 13:52:13:712 SAMNR
    183 2018-08-31 15:41:05:723 AMMBX
    [root@peipei3514 logs]# grep "AM" test.log -i
    74 2018-05-14 13:52:13:712 SAMNR
    183 2018-08-31 15:41:05:723 AMMBX
    
    选项 -e 指定多个匹配样式

    语法:

    grep -e "text" -e "text2" . -i
    

    示例:

    [root@peipei3514 logs]# grep -e "AM" -e "AB" test.log
    38 2018-04-08 13:16:19:706 HABMP
    74 2018-05-14 13:52:13:712 SAMNR
    84 2018-05-24 14:02:04:713 ZABRH
    91 2018-05-31 14:09:10:714 ABJKY
    183 2018-08-31 15:41:05:723 AMMBX
    [root@peipei3514 logs]# echo this is a text line | grep -e "is" -e "line" -o
    is
    is
    line
    
    #也可以使用-f选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。
    [root@peipei3514 logs]# cat patfile
    aaa
    bbb
    [root@peipei3514 logs]# echo aaa bbb ccc ddd eee | grep -f patfile -o
    aaa
    bbb
    
    在grep搜索结果中包括或者排除指定文件

    示例:

    #只在目录中test3.log和test4.log文件中递归搜索字符"KS"
    [root@peipei3514 logs]# grep "KS" . -r --include=test{3,4}.log
    ./sublogs/test3.log:426 2019-06-10 20:47:38:555 SSDKS
    ./sublogs/test4.log:736 2020-04-16 01:58:35:912 XMAKS
    ./sublogs/test4.log:743 2020-04-23 02:05:49:912 WBKSC
    ./sublogs/test4.log:783 2020-06-02 02:45:39:916 ASKST
    #在搜索结果中排除所有README文件
    grep "main()" . -r --exclude "README"
    
    #实际测试时下面两个命令并没有管用
    #在搜索结果中排除所有README文件
    grep "main()" . -r --exclude "README"
    
    #在搜索结果中排除filelist文件列表里的文件
    grep "main()" . -r --exclude-from filelist
    
    使用0值字节后缀的grep与xargs
    #测试文件
    [root@peipei3514 logs]# echo "aaa" > file1
    [root@peipei3514 logs]# echo "bbb" > file2
    [root@peipei3514 logs]# echo "aaa" > file3
    [root@peipei3514 logs]# ll
    总用量 32
    -rw-r--r--. 1 root root    4 4月  10 14:22 file1
    -rw-r--r--. 1 root root    4 4月  10 14:22 file2
    -rw-r--r--. 1 root root    4 4月  10 14:22 file3
    [root@peipei3514 logs]# grep "aaa" file* -lZ
    file1file3[root@peipei3514 logs]# grep "aaa" file* -l
    file1
    file3
    [root@peipei3514 logs]# grep "aaa" file* -lZ | xargs -0 rm
    [root@peipei3514 logs]# ll
    总用量 24
    -rw-r--r--. 1 root root    4 4月  10 14:22 file2
    -rw-r--r--. 1 root root    8 4月  10 13:55 patfile
    drwxr-xr-x. 3 root root   58 4月  10 13:46 sublogs
    -rw-r--r--. 1 root root 7000 4月  10 13:38 test2.log
    -rw-r--r--. 1 root root 6899 4月  10 13:38 test.log
    
    #执行后会删除file1和file3,grep输出用-Z选项来指定以0值字节作为终结符文件名(\0),xargs -0 读取输入并用0值字节终结符分隔文件名,然后删除匹配文件,-Z通常和-l结合使用。
    
    grep静默输出

    语法:

    grep -q "test" filename
    
    #不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试。
    
    打印出匹配文本之前或者之后的行
    [root@peipei3514 logs]# seq 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #显示匹配某个结果之后的3行,使用 -A 选项:
    [root@peipei3514 logs]# seq 10 | grep "5" -A 3
    5
    6
    7
    8
    
    #显示匹配某个结果之前的3行,使用 -B 选项:
    [root@peipei3514 logs]# seq 10 | grep "5" -B 3
    2
    3
    4
    5
    
    #显示匹配某个结果的前三行和后三行,使用 -C 选项:
    [root@peipei3514 logs]# seq 10 | grep "5" -C 3
    2
    3
    4
    5
    6
    7
    8
    
    #如果匹配结果有多个,会用“--”作为各匹配结果之间的分隔符:
    [root@peipei3514 logs]# echo -e "a\nb\nc\na\nb\nc"
    a
    b
    c
    a
    b
    c
    [root@peipei3514 logs]# echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
    a
    b
    --
    a
    b
    
    展开全文
  • grep命令

    千次阅读 2019-01-09 20:47:32
    grep 命令 简介  grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。  ...
  • ps -ef|grep gogs | grep -v grep | wc -l 其中的grep -v grep 是干啥的呢 ? 很简单 ,为了去除包含grep的进程行 ,避免影响最终数据的正确性 。 比如 , [isTester@iZ94b31ttqsZ]~# ps -ef|grep gogs isTester....
  • grep命令用法解析

    千次阅读 2019-04-22 19:31:51
    作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,掌握好其用法是很有必要的。 首先谈一下grep命令的常用格式为:grep [选项] ”模式“ [文件] grep家族总共有三个:grep,egrep,fgrep。 常用选项...
  • shell中grep的用法

    万次阅读 2019-06-14 20:53:52
    一:grep文本搜索 grep:强大的文本搜索工具 补充说明: grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则...
  • linux命令---grep命令

    万次阅读 2019-05-04 08:40:35
     grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。  Unix的grep家族包括...
  • grep - 命令

    千次阅读 2019-06-10 09:24:31
    grep 命令 grep 命令用于在文件中执行关键词搜索,并显示匹配的效果。格式为 “grep [选项] [文件]” 参数 作用 -b 将可执行文件当文本文件来搜索 -c 仅显示找到的行数 -i 忽略大小写 -n 显示行号 -...
  • grep命令详解

    千次阅读 2019-05-05 16:59:51
    grep命令是文本搜索命令,它可以正则表达式搜索文本,也可从一个文件中的内容作为搜索关键字。 grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串...
  • Linux grep -v 命令排除输出

    万次阅读 2019-05-24 13:53:02
    有时候,我们在线上查日志定位问题的时候,经常会使用cat xxxx.log |grep yyyy命令,如果grep的时候,想排除某些字段,那么可以如下操作: cat test.log | grep "login"|grep -v "deviceType" 上面的命令的意思是:...
  • grep for windows (支持命令行)

    万次阅读 2016-12-21 15:01:08
    windows下面也有各种移植的grep,不过要么不好用(不能遍历子目录),就是要收费。 最后我找到了这个:GREP for Windows 特点,命令行使用,体积很小,只要下载解压,然后把路径加入环境变量path中就在那里都...
  • 在项目中,经常会遇到...所以,可以考虑通过find与grep命令组合先查找出需要修改的脚本再进行统一处理。--递归查找目录下含有该字符串的所有文件 grep -rn "data_chushou_pay_info" /home/hadoop/nisj/...
  • grep命令参数及用法

    万次阅读 2012-05-16 09:44:33
    功能说明:查找文件里...补充说明:grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予
  • grep用法详解:grep与正则表达式

    万次阅读 2010-05-01 15:56:00
    首先要记住的是: 正则...vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;1基础正则表达式grep 工具,以前介绍过。grep -[acinv] 搜索内容串 filename-a 以文本文件方式搜索-c
  • 1、查找当前目录文件名中的字符串: grep 字符串 文件名2、查找某个文件字符串,并输出行号:grep -n 字符串 文件名3、查找当前目录(包含子目录)的字符串:grep -r 字符串 *4、查找当前目录(包含子目录)的字符串...
  • from:...vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;在以前上班的公司里,由于公司是基于web的服务型网站(nginx),对
  • 在linux中经常要对一些动态的文本文件抽取指定的字符串,比如执行ps命令后想要获取指定...一、sed+grep方法: 首先大概了解一下sed,sed是linux里面一个非交互性的文本流编辑器(好长的定义,反正我听起来我很拗口)。
  • Linux中使用grep正则提取字符串 echo office365 | grep -P '\d+' -o find . -name &amp;amp;quot;*.txt&amp;amp;quot; | xargs grep -P 'regex' -o xargs会将find结果作为grep的输入,防止find结果过多...
1 2 3 4 5 ... 20
收藏数 698,927
精华内容 279,570
关键字:

grep