精华内容
下载资源
问答
  • grep匹配空格字符串以及正则使用

    万次阅读 2019-02-27 15:47:29
    需要使用 ‘\’ 来转义空格。 如果我想匹配"from houbank"或者"from finedb"这两者之一的字符串 则用grep -E 'from\ houbank|from\ finedb' 后续我还想在结果集中筛选出以houbank_开头的字...

    首先,man grep可以看到官方使用细则

    举例:我想匹配"from houban"

    则grep ''from\ houbank'

    需要使用 ‘\’ 来转义空格。

    如果我想匹配"from  houbank"或者"from  finedb"这两者之一的字符串

    则用grep -E 'from\ houbank|from\ finedb'

    后续我还想在结果集中筛选出以houbank_开头的字符串并且以它为分割(其实就是为了提取库名+表名)

    grep -E 'from\ houbank|from\ finedb'|awk '{if(match($0,"houbank_(.*?)\\.(.*?)",m)){print m[0]}}'

    展开全文
  • 前言 grep 命令支持三种正则表达式语法:Basic、Extended 和 Perl-compatible 。当没有指定正则表达式类型时,grep 命令将搜索模式默认为基本正则表达式...使用 grep 命令基本正则表达式搜索多个匹配模式的语法如下:

    前言

    grep 命令支持三种正则表达式语法:Basic、Extended 和 Perl-compatible 。当没有指定正则表达式类型时,grep 命令将搜索模式默认为基本正则表达式。

    要搜索多个匹配模式,可以使用 OR ( alternation ) 运算符。我们可以用 OR 运算符 |( pipe )指定不同的匹配项,这些匹配项可以是文本字符串,也可以是表达式集。值得注意的是,在所有正则表达式运算符中,这个运算符的优先级是最低的。

    使用 grep 命令基本正则表达式搜索多个匹配模式的语法如下:

    $ grep 'pattern1\|pattern2' filename 

    这里需要注意的是,始终要用单引号将正则表达式括起来,因为单引号内的内容原样输出,被单引号括起的内容不管是常量还是变量不会发生替换。

    使用基本正则表达式时,元字符被解释为字面字符。要保留元字符的特殊含义,必须用反斜杠( \ )对它们进行转义。这就是为什么我们要转义 OR 运算符(|)。

    要将模式解释为扩展正则表达式,请调用 grep -E(或 --extended-regexp )选项。使用扩展正则表达式时,不需要对 OR 运算符 (|) 进行转义:

    $ grep -E 'pattern1|pattern2' file 

    1.Grep命令搜索多个字符串

    通常我们认为,文字字符串是最基本的模式。

    接下来我们将示例,搜索某用户日志错误文件中出现的所有 fatal、error 和 critical 字符串。语法如下:

    $ grep 'fatal\|error\|critical' /var/log/nginx/error.log 

    还需要注意的是,如果要搜索的字符串包含空格,需要用双引号将其括起来。

    下面是使用扩展正则表达式的同一个示例,它不需要转义字符:

    $ grep -E 'fatal|error|critical' /var/log/nginx/error.log 

    默认情况下,grep 命令是区分大小写的。要在搜索时忽略大小写,请调用 grep 加 -i (或 --ignore-case )选项,示例如下:

    $ grep -i 'fatal|error|critical' /var/log/nginx/error.log 

    当你只想搜索某个单词时,比如你想搜索的是单词 error ,grep 命令会输出所有包含 error 字符串的行,即它除了会输出包含 error 单词的行,还会输出包含 errorless 或 antiterrorists 等非 error 单词的行,这样是极不方便的。

    因此要仅返回指定字符串是整词的行,或者是由非单词字符括起来的行,可以使用 grep 加 -w (或 --word-regexp )选项:

    $ grep -w 'fatal|error|critical' /var/log/nginx/error.log 

    值得注意的是,单词字符包括有字母、数字字符(比如 a-z、a-Z 和 0-9 )以及下划线( _ ),所有其他字符都被视为非单词字符。

     

    2.grep同时匹配多个关键字或任意关键字

    2.1与操作

    grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

    grep word1 file.txt | grep word2 |grep word3

    必须同时满足三个条件(word1、word2和word3)才匹配。

     

    2.2 或操作

    grep匹配任意关键字

    grep -E 'str1|str2|str3' filename //找出文件(filename)中包含str1或者包含str2或者包含str3的行
    

    egrep实现

    egrep 'str1|str2|str3' filename //用egrep同样可以实现

    awk实现

    awk '/str1|str2/str3/' filename  //awk 的实现方式

    2.3其他操作

    grep -i pattern filename #不区分大小写地搜索。默认情况区分大小写。
    grep -l pattern filename #只列出匹配的文件名。
    grep -L pattern filename #列出不匹配的文件名。
    grep -w pattern filename #只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’)。

     

     

     

    参考文章:

    1.grep同时匹配多个关键字或任意关键字

    2.grep多个关键字“与”和“或”

    3.grep 满足 或 排除多个关键字

    4.如何使用Grep命令查找多个字符串

     

     

     

     

     

     

     

     

    展开全文
  • grep 或 egrep 或awk 过滤两个或多个关键词|使用grep匹配“与”或者“或”模式 2011-06-23 14:06 grep 或 egrep 或awk 过滤两个或多个关键词: grep -E '123|abc' filename // 找出文件(filename)...
    grep 或 egrep 或awk 过滤两个或多个关键词|使用grep匹配“与”或者“或”模式
    2011-06-23 14:06

    grep 或 egrep 或awk 过滤两个或多个关键词:
    grep -E '123|abc' filename  // 找出文件(filename)中包含123或者包含abc的行
    egrep '123|abc' filename    //用egrep同样可以实现
    awk '/123|abc/'  filename // awk 的实现方式
    使用grep匹配“与”或者“或”模式:
    g r e p一般格式为:

    CODE:
    grep [选项]基本正则表达式[文件]
    这里基本正则表达式可为字符串。 单引号双引号
    在g r e p命令中输入字符串参数时,最好将其用双引号括起来。

    在调用模式匹配时,应使用单引号。

    例如:“m y s t r i n g”。这样做有两个原因,一是以防被误解为s h e l l命令,二是可以用来查找多个单词组成的字符串。
    在调用变量时,也应该使用双引号,诸如: g r e p“$ M Y VA R”文件名,如果不这样,将没有返回结果。


    常用的g r e p选项有:

    QUOTE:
    -c 只输出匹配行的计数。
    -i 不区分大小写(只适用于单字符)。
    -h 查询多文件时不显示文件名。
    -l 查询多文件时只输出包含匹配字符的文件名。
    -n 显示匹配行及行号。
    -s 不显示不存在或无匹配文本的错误信息。
    -v 显示不包含匹配文本的所有行。 开始讨论之前,先生成一个文件,插入一段文本,并在每列后加入< Ta b >键,g r e p命令示例中绝大多数将以此为例,其命名为d a t a . . f。生成一个文件,d a t a . f的记录结构如下:

    QUOTE:
    第1列:城市位置编号。
    第2列:月份。
    第3列:存储代码及出库年份。
    第4列:产品代号。
    第5列:产品统一标价。
    第6列:标识号。
    第7列:合格数量。 文件内容如下:

    CODE:
    $ cat data.f
    48    Dec     3BC1977 LPSX 68.00 LVX2A 138
    483     Sept 5AP1996 USP     65.00 LVX2C 189
    47    Oct     3ZL1998 LPSX 43.00 KVM9D 512
    219     dec     2CC1999 CAD     23.00 PLV2C 68
    484     nov     7PL1996 CAD     49.00 PLV2C 234
    483     may     5PA1998 USP     37.00 KVM9D 644
    216     sept 3ZL1998 USP     86.00 KVM9E 234 1、查询多个文件
    在所有文件中查询单词“ sort it”

    CODE:
    $ grep "sort it" * 2、 行匹配
    1)显示包含“4 8”字符串的文本:

    CODE:
    $ grep   "48"data.f 2)输出匹配行的总数

    CODE:
    $ grep -c "48"data.f
    4 g r e p返回数字4,表示:包含字符串“4 8”的有4行。

    3)行数
    显示满足匹配模式的所有行行数:

    CODE:
    $ grep -n "48"data.f 行数在输出第一列,后跟包含4 8的每一匹配行。

    4)显示非匹配行
    显示所有不包含4 8的各行

    CODE:
    $ grep -v "48"data.f 5)精确匹配
    可能大家已注意到,在上一例中,抽取字符串“ 4 8”,返回结果包含诸如4 8 4和4 8 3等包含“4 8”的其他字符串,实际上应精确抽取只包含4 8的各行。
    使用g r e p抽取精确匹配的一种更有效方式是在抽取字符串后加\ >。假定现在精确抽取4 8,方法如下:

    CODE:
    $grep "48\>" data.f

    QUOTE:
    另一种方法我试过,好像不行:
    注意在每个匹配模式中抽取字符串后有一个< Ta b >键,所以应操作如下:
    < Ta b >表示点击t a b键。
    $grep "48<tab>" data.f 6)大小写敏感
    缺省情况下, g r e p是大小写敏感的,如要查询大小写不敏感字符串,必须使用- i开关。在d a t a . f文件中有月份字符S e p t,既有大写也有小写,要取得此字符串大小写不敏感查询,方法如下:

    CODE:
    $grep -i "48" data.f grep和正则表达式

    使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。使用正则表达式时最好用单引号括起来,这样可以防止g r e p中使用的专有模式与一些s h e l l命令的特殊方式相混淆。
                                                                               
    1、模式范围
    抽取代码为4 8 4和4 8 3的城市位置,可以使用[ ]来指定字符串范围。

    CODE:
    $ grep "48[34]" data.f
    483     Sept 5AP1996 USP     65.00 LVX2C 189
    484     nov     7PL1996 CAD     49.00 PLV2C 234
    483     may     5PA1998 USP     37.00 KVM9D 644 2、不匹配行首
    使行首不是4或8,可以在方括号中使用^记号。

    CODE:
    $ grep "^[^48]" data.f
    219     dec     2CC1999 CAD     23.00 PLV2C 68
    216     sept 3ZL1998 USP     86.00 KVM9E 234 如果是字符串48

    CODE:
    $ grep -v "^[^48]" data.f 3、设置大小写
    使用- i开关可以屏蔽月份S e p t的大小写敏感

    CODE:
    [sam@chenwy sam]$ grep -i "sept" data.f
    483     Sept 5AP1996 USP     65.00 LVX2C 189
    216     sept 3ZL1998 USP     86.00 KVM9E 234 也可以用另一种方式[ ]模式抽取各行包含S e p t和s e p t的所有信息。

    CODE:
    [sam@chenwy sam]$ grep '[sS]ept' data.f 如果要抽取包含S e p t的所有月份,不管其大小写,并且此行包含字符串483,可以使用管道命令,即符号“|”左边命令的输出作为“ |”右边命令的输入。举例如下:

    CODE:
    [sam@chenwy sam]$ grep '[sS]ept' data.f | grep 48
    483     Sept 5AP1996 USP     65.00 LVX2C 189 不必将文件名放在第二个g r e p命令中,因为其输入信息来自于第一个g r e p命令的输出
                                                                               
    4、匹配任意字符
    如果抽取以K开头,以D结尾的所有代码,可使用下述方法,因为已知代码长度为5个字符:

    CODE:
    [sam@chenwy sam]$ grep 'K...D' data.f
    47    Oct     3ZL1998 LPSX 43.00 KVM9D 512
    483     may     5PA1998 USP     37.00 KVM9D 644 将上述代码做轻微改变,头两个是大写字母,中间两个任意,并以C结尾:

    CODE:
    [sam@chenwy sam]$ grep '[A-Z]..C' data.f
    483     Sept 5AP1996 USP     65.00 LVX2C 189
    219     dec     2CC1999 CAD     23.00 PLV2C 68
    484     nov     7PL1996 CAD     49.00 PLV2C 234 5、日期查询
    一个常用的查询模式是日期查询。先查询所有以5开始以1 9 9 6或1 9 9 8结尾的所有记录。使用模式5 . . 1 9 9 [ 6 , 8 ]。这意味着第一个字符为5,后跟两个点,接着是1 9 9,剩余两个数字是6或8。

    CODE:
    [sam@chenwy sam]$ grep '5..199[6,8]' data.f
    483     Sept 5AP1996 USP     65.00 LVX2C 189
    483     may     5PA1998 USP     37.00 KVM9D 644 6、范围组合
    必须学会使用[ ]抽取信息。假定要取得城市代码,第一个字符为0-9,第二个字符在0到5之间,第三个字符在0到6之间,使用下列模式即可实现。

    CODE:
    [sam@chenwy sam]$ grep '[0-9][0-5[0-6]' data.f
    48    Dec     3BC1977 LPSX 68.00 LVX2A 138
    483     Sept 5AP1996 USP     65.00 LVX2C 189
    47    Oct     3ZL1998 LPSX 43.00 KVM9D 512
    219     dec     2CC1999 CAD     23.00 PLV2C 68
    484     nov     7PL1996 CAD     49.00 PLV2C 234
    483     may     5PA1998 USP     37.00 KVM9D 644
    216     sept 3ZL1998 USP     86.00 KVM9E 234 这里返回很多信息,有想要的,也有不想要的。参照模式,返回结果是正确的,因此这里

    CODE:
    [sam@chenwy sam]$ grep '^[0-9][0-5][0-6]' data.f
    219     dec     2CC1999 CAD     23.00 PLV2C 68
    216     sept 3ZL1998 USP     86.00 KVM9E 234 这样可以返回一个预期的正确结果。
                                                                            
    7、模式出现机率
    抽取包含数字4至少重复出现两次的所有行,方法如下:

    CODE:
    [sam@chenwy sam]$ grep '4\{2,\}' data.f
    483     may     5PA1998 USP     37.00 KVM9D 644 上述语法指明数字4至少重复出现两次,注意有无边界字符的区别。                                                                            
    同样,抽取记录使之包含数字9 9 9(三个9),方法如下:

    CODE:
    [sam@chenwy sam]$ grep '9\{3,\}' data.f
    219     dec     2CC1999 CAD     23.00 PLV2C 68 如果要查询重复出现次数一定的所有行,语法如下,数字9重复出现两次或三次:

    CODE:
    [sam@chenwy sam]$ grep '9\{3\}' data.f
    219     dec     2CC1999 CAD     23.00 PLV2C 68
    [sam@chenwy sam]$ grep '9\{2\}' data.f
    483     Sept 5AP1996 USP     65.00 LVX2C 189
    47    Oct     3ZL1998 LPSX 43.00 KVM9D 512
    219     dec     2CC1999 CAD     23.00 PLV2C 68
    484     nov     7PL1996 CAD     49.00 PLV2C 234 有时要查询重复出现次数在一定范围内,比如数字或字母重复出现2到6次,下例匹配数字8重复出现2到6次,并以3结尾:

    CODE:
    [sam@chenwy sam]$ cat myfile
    83
    888883
    8884
    88883
    [sam@chenwy sam]$ grep '8\{2,6\}3' myfile
    888883
    88883 8、使用grep匹配“与”或者“或”模式
    g r e p命令加- E参数,这一扩展允许使用扩展模式匹配。例如,要抽取城市代码为2 1 9或2 1 6,方法如下:

    CODE:
    [sam@chenwy sam]$ grep -E '219|216' data.f
    219     dec     2CC1999 CAD     23.00 PLV2C 68
    216     sept 3ZL1998 USP     86.00 KVM9E 234 9、空行
    结合使用^和$可查询空行。使用- c参数显示总行数:

    CODE:
    [sam@chenwy sam]$ grep -c '^$' myfile 使用- n参数显示实际在哪一行:

    CODE:
    [sam@chenwy sam]$ grep -c '^$' myfile 10、匹配特殊字符
    查询有特殊含义的字符,诸如$ . ' " * [] ^ | \ + ? ,必须在特定字符前加\。假设要查询包含“.”的所有行,脚本如下:

    [sam@chenwy sam]$ grep '\.' myfile 或者是一个双引号:

    CODE:
    [sam@chenwy sam]$ grep '\"' myfile 以同样的方式,如要查询文件名c o n f t r o l l . c o n f(这是一个配置文件),脚本如下:

    CODE:
    [sam@chenwy sam]$ grep 'conftroll\.conf' myfile 11、查询格式化文件名
    使用正则表达式可匹配任意文件名。系统中对文本文件有其标准的命名格式。一般最多六个小写字符,后跟句点,接着是两个大写字符。

    CODE:
    [sam@chenwy sam]$ grep '^[a-z]\{1,6\}\.[A-Z]\{1,2\}' filename 这个写法我不知道有没有错 :oops:   :oops:   :oops: 
                                                                               
    12 查询IP地址
    要查看n n n . n n n网络地址,如果忘了第二部分中的其余部分,只知有两个句点,例如n n n . n n . .。要抽取其中所有nnn.nnn IP地址,使用[ 0 - 9 ] \ { 3 \ } \ . [ 0 - 0 \ { 3 \ } \。含义是任意数字出现3次,后跟句点,接着是任意数字出现3次,后跟句点。

    CODE:
    [0-9]\{3\}\.[0-9]\{3\}\.' 1、类名

    g r e p允许使用国际字符模式匹配或匹配模式的类名形式。
    类名及其等价的正则表达式类等价的正则表达式类等价的正则表达式

    QUOTE:
    [ [ : u p p e r : ] ] [ A - Z ] [ [ : a l n u m : ] ] [ 0 - 9 a - zA-Z]
    [ [ : l o w e r : ] ] [ a - z ] [ [ : s p a c e : ] ] 空格或t a b键
    [ [ : d i g i t : ] ] [ 0 - 9 ] [ [ : a l p h a : ] ] [ a - z A - Z ] 例一:取以5开头,后跟至少两个大写字母:

    CODE:
    $grep '5[[:upper:]][[:upper]]' data.f 取以P或D结尾的所有产品代码:

    CODE:
    grep '[[:upper:]][[:upper:]][P,D]' data.f 2、使用通配符*的匹配模式

    CODE:
    $cat testfile
    looks
    likes
    looker
    long 试试如下:

    CODE:
    grep "l.*s" testfile 如在行尾查询某一单词,试如下模式:

    CODE:
    grep "ng$" testfile 这将在所有文件中查询行尾包含单词ng的所有行。

    3、系统grep

    文件passwd


    CODE:
    [root@Linux_chenwy sam]# grep "sam" /etc/passwd
    sam:x:506:4::/usr/sam:/bin/bash 上述脚本查询/ e t c / p a s s w d文件是否包含sam字符串

    如果误输入以下脚本:

    CODE:
    [root@Linux_chenwy sam]# grep "sam" /etc/password
    grep: /etc/password: 没有那个文件或目录 将返回g r e p命令错误代码'No such file or directory'。
    上述结果表明输入文件名不存在,使用g r e p命令- s开关,可屏蔽错误信息。
    返回命令提示符,而没有文件不存在的错误提示。

    CODE:
    [root@Linux_chenwy sam]# grep -s "sam" /etc/password 如果g r e p命令不支持- s开关,可替代使用以下命令:

    CODE:
    [root@Linux_chenwy sam]# grep "sam" /tec/password >/dev/null 2>&1 脚本含义是匹配命令输出或错误( 2 > $ 1),并将结果输出到系统池。大多数系统管理员称/ d e v / n u l l为比特池,没关系,可以将之看成一个无底洞,有进没有出,永远也不会填满。

    上述两个例子并不算好,因为这里的目的只想知道查询是否成功。

    如要保存g r e p命令的查询结果,可将命令输出重定向到一个文件。

    CODE:
    [root@Linux_chenwy sam]# grep "sam" /etc/passwd >/usr/sam/passwd.out
    [root@Linux_chenwy sam]# cat /usr/sam/passwd.out
    sam:x:506:4::/usr/sam:/bin/bash 脚本将输出重定向到目录/ t m p下文件p a s s w d . o u t中。
    展开全文
  • Linux基础——grep匹配命令

    万次阅读 2017-03-20 09:55:21
    Linux系统shell基础命令,grep替换功能介绍。
    正则就是有一定规律的字符串,不仅可以使用命令行工具grep, sed,awk ,egrep去引用正则,还可以把正则嵌入到 nginx,apache,甚至php,python中。特殊符号(. * + ? |)
    grep,主要用来过滤出指定的行。指定的条件,用正则表达式。

    1、语法选项
    grep [-civnABC] 'word' filename
    -n 在输出符合要求的行的同时,连同行号一起输出
    -c 打印符合要求的行数
    -v 打印不符合要求的行
    --color 匹配到的关键字用红色标识
    -A 后跟一个数字,空格可有可无,-A2 表示打印符合要求的行以及下面两行
    -B 后跟一个数字,-B2 表示打印符合要求的行以及上面两行
    -C 后跟一个数字,-C2 表示打印符合要求的行以及上下各两行
    -r 把目录下面所有的文件全部遍历 【不是很常用】
    -i 不区分大小写
    -E 脱意字符\的作用
    #grep -r "iptables" /etc/* 显示该目录下所有包含该字符的信息,包含文件路径
    #grep -rh "iptables" /etc/* 不显示文件路径,直接显示结果

    2、例子介绍
    #alias grep='grep --color'
    #cp /etc/passwd 1.txt

    #grep '[cnsoe]' 1.txt 取其中任意一个进行匹配,匹配cnsoe中的任何一个
    #grep '[0-9]' 1.txt 匹配包含任意数字
    #grep '[^0-9]' 1.txt 匹配包含非数字的行,某行有数字,字母,特殊字符,也会显示出来。
    #grep '^[0-9]' 1.txt 取数字开头的行
    #grep -v '[0-9]' 1.txt 匹配不包含数字的行, 可匹配空行,特殊字符
    #grep -v '^[0-9]' 1.txt 匹配非0-9开头的行, 可匹配空行,特殊字符
    #grep '^[^0-9]' 1.txt 取不以数字开头的行,可匹配特殊符号, 不包括空行
    #grep '^$' 1.txt 取空行,不包含任何字符的行,空格也算特殊字符
    #grep '[^a-zA-Z]' 匹配包含非字母的行,并非全部都没有字母,只要含有非字母都可以
    #grep '^[1-9][0-9]*$' 1.txt:匹配开头为1到9其中一个数字,结尾是0个或多个数字 ?????
    'r.o' .表示任意一个字符,包括特殊符号。
    'r\?o' ?表示零个或一个?前面的字符;匹配出的结果又 roo , r\?o中表示匹配前面字符0次或1次,即匹配ro或o,所以,roo应该分开看,前两个字符ro是匹配字符‘r’一次,o是匹配字符‘r’0次,同理oo也是分开看,都是匹配字符‘r’0次。
    'r+o' +表示大于等于1个+号前面的字符
    'r*o' *表示零个或多个*号前面的字符,
    'r.*o' .* 任意一个字符+任意一个星号*前面的字符==任意零个或多个任意字符,r开头o结尾的字符,中间不重要,可以使特殊符号, 贪婪匹配
    'r*.o' 匹配出o前面有零个或者多个任意字符的行
    -E 'r?o' -E 和 脱意符号\的作用一样,grep -E == egrep
    过滤出带有某个关键字的行并输出行号
    #grep -n 'root' 1.txt

    过滤出不带某个关键词的行并输出行号
    #grep -n -v 'root' 1.txt

    过滤出所有包含数字的行
    #grep '[0-9]' 1.txt 任意一个数字都可以匹配,多个也可以

    过滤所有不包含数字的行
    #grep -v '[0-9]' 1.txt

    去除所有以"#"开头的行
    #grep -v '^#' 1.txt

    去除所有空行和以 # 开头的行
    #grep -v '^$' 1.txt |grep -v '^#'

    过滤英文字母开头的行
    #grep '^[a-zA-Z]' 1.txt

    过滤以非数字开头的行
    #grep '^[^0-9]' 1.txt 匹配结果会首字母会颜色标出,匹配特殊符号
    #grep -nv '^[0-9]' 1.txt 匹配结果差别在下面这个没有颜色,匹配特殊符号以及空行

    过滤任意一个或多个字符 包含r.o,s*.d,p.*x的字符
    #grep 'r.o' 1.txt ; grep 'r*t' 1.txt ; grep 'r.*t' 1.txt
    . 表示任意一个字符
    * 表示 零个 或 多个 前面的字符
    .* 表示零个或多个任意字符,空行也包含在内

    过滤出包含 root 的行以及下面一行
    #grep -A 1 'root' 1.txt

    过滤出包含root的行以及上面一行
    #grep -B 1 ‘root' 1.txt

    指定过滤字符次数 匹配一个oo的行
    #grep 'o\{2\}' 1.txt
    过滤包含2个字母o的行

    3、egrep
    grep工具的扩展,可以实现所有的grep功能, 可以用grep -E代替egrep。为方便可全部使用egrep来代替grep。

    #alias egrep='egrep --color'
    #grep 'r\?o' 1.txt == egrep 'r\?o' 1.txt== grep -E 'r?o' 1.txt

    匹配 1 个或 1 个以上 + 前面的字符 匹配o+
    #egrep 'o+' 1.txt

    匹配 0 个或 1 个 ? 前面字符 匹配o?
    #egrep 'o?' 1.txt

    匹配 roo 或者 匹配 body
    #egrep 'roo|body' 1.txt

    匹配包含roo 并且 包含 log 的行
    #egrep 'roo' 1.txt |egrep 'roo|log'
    #egrep 'log' 1.txt |egrep 'roo|log'

    用括号表示一个整体,例子会匹配 roo 或者 ato
    #egrep 'r(oo)|(at)o' 1.txt

    匹配 1 个或者多个 'oo'
    #egrep '(oo)+' 1.txt

    匹配 1 到 3 次 'oo'
    #egrep '(oo){1,3}' 1.txt
    匹配结果出现9个o,{1,3}进行了多次匹配,也可以理解为包含但不限于1-3次。 1.txt文件中某一行能匹配oo 1次、2次、3次都符合条件。对于 oooooooooo,前面6个o 符合:匹配oo3次;后面4个o符合匹配oo2次
    #egrep '(oo){6}' 1.txt 匹配6个
    #egrep '(oo)'{6,} 1.txt 匹配6个以上


    4、. * + ? 总结 统配字符
    . 任意字符,包括特殊字符,下划线,空格,
    * 零个 或者 多个 *前面的字符
    .* 任意数量任意字符,包括空行
    *. 'r*.o' 匹配出o前面有零个或者多个任意字符的行
    + 表示 1 个或 多个 + 前面的字符 仅限egrep
    ? 表示 0 个或 1 个?前面的字符 仅限egrep

    grep 表达式里面出现 ? + ( ) { } | 这几个特殊符号,需要前面加脱意符号,或者使用 grep -E ,或者使用egrep,故方便起见,全部使用egrep。


    扩展 --include 指定文件
    grep 其实还可以这样使用:
    在tmp目录下,过滤所有 *.txt 文档中含有root的行
    grep -r --include="*.txt" 'root' /

    data目录下,所有 *.php 文档中包含eval的行
    egrep -rhn --include="*.php" 'eval' 1.txt




    展开全文
  • Pattern p = Pattern.compile("\\s{2,}|\t"); Matcher m = p.matcher(str); String strNoBlank = m.replaceAll(" "); System.out.println(strNoBlank);
  • 如何使用Grep命令查找多个字符串

    千次阅读 2020-09-07 00:15:30
    简单介绍一下,grep 命令可以理解为是一个功能强大的命令行工具,可以用它在一个或多个输入文件中搜索与正则表达式相匹配的文本,然后再将每个匹配的文本用标准输出的格式写出来。 因此,良许向大家分享一下如何使用...
  • grep匹配的问题

    2018-10-29 19:20:06
    把(?&lt;=a)b(?=c)这里面的a当成模式匹配,正确的是把b当做模式来匹配,a和c只是条件。模式匹配+条件成立才是匹配成功 这就是(?...grep -o (only的意识) 只取出匹配的字符而非全行 (?&...
  • grep与正则表达式匹配

    千次阅读 2018-08-31 10:18:47
     使用不带-E 选项的grep时,支持基本正则匹配。例如,'abc'关键词检索,'^abc' 匹配行首,'abc$' 匹配行尾 grep 'bash' /etc/passwd #输出包含bash的行 grep '^r' /etc/passwd #匹配以r开头的行 grep 'in$' /et...
  • 一、 grep正则表达式元字符集  ^  锚定行的开始 如:'^grep'匹配所有以grep开头的行。  $  锚定行的结束 如:'grep$'匹配所有以... 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟gr...
  • grep怎样匹配tab键

    万次阅读 2008-07-31 15:48:00
     google了一下关键字“grep匹配tab”,有两篇帖子问这问题的,底下的回答都是设法绕开这问题,比如用“.*”来匹配tab键,不着调,很不爽。 再google一下外文吧,关键字“grep tab”,搜到一篇帖子: Rob
  • 需求公司想jenkins在远程部署项目的同时,还要进行项目备份, 之前只备份最近一次构建的数据,也就是只保留到一份, 现在公司希望能保留按时间...排除多少可以使用head -n 3rm -rf `ls | grep "ggservice-dataserv
  • 简单来说就是文本搜索工具,根据用户指定的文本搜索模式对目标文本进行搜索,显示能够所匹配的行,当然,也可以把grep看也是一文本过虑器、模式匹配器。 egrep:使用扩展正则表达式来构建模式...
  • 1. grep -E "word1|word2|word3" file.txt 满足任意条件(word1、word2和word3之一)将匹配。 2. grep word1 file.txt | grep word2 |grep word3... 必须同时满足三条件(word1、word2和word3)才匹配。 ...
  • grep

    千次阅读 2016-05-09 13:46:43
    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 2.格式 grep...
  • 正则-匹配多个单词

    千次阅读 2019-10-14 20:17:51
    匹配多个单词 \b(State of Formation|Jurisdiction)\b:[\d\D]*?<strong>([\d\D]*?)</strong>
  • grep正则表达式

    2017-03-13 09:49:24
    grep正则表达式元字符集:^ 锚定行的开始 如:’^grep匹配所有以grep开头的行。...* 匹配零个或多个先前字符 如:’grep匹配所有一个或多个空格后紧跟grep的行。 .一起用代表任意字符。 [] 匹配
  • 1、查找当前目录文件名中的字符串: grep 字符串 文件名 2、查找某个文件中字符串,并输出行号:grep -n 字符串 文件名 3、查找当前目录(包含子目录)的字符串:grep -r 字符串 * 4、查找当前目录(包含...
  • Grep

    2015-05-10 09:38:14
    grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep...
  • grep中使用"\d"匹配数字不成功的原因

    千次阅读 2017-09-15 20:59:42
    则表达式:在计算机科学中,是指一用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计...
  • grep如何忽略.svn目录,以及如何忽略多个目录 grep -r 'function_name' * (*表示当前目录下所有文件,-r表示递归查找,使用的模式较为简单,仅作参考)由于现在的很多项目都使用subversion作为版本管理工具,因此...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,508
精华内容 18,603
关键字:

grep匹配多个空格