• grep命令


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


    -a 不要忽略二进制数据。

    -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。

    -b 打印样式匹配所位于的字符或字节偏移

    -B 在显示符合范本样式的那一行之外,并显示该行之前的内容。

    -c 计算符合范本样式的列数。

    -C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。

    -d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。

    -e<范本样式> 指定字符串作为查找文件内容的范本样式。

    -E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。

    -f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。

    -F 将范本样式视为固定字符串的列表。

    -G 将范本样式视为普通的表示法来使用。

    -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。

    -H 在显示符合范本样式的那一列之前,标示该列的文件名称。

    -i 忽略字符大小写的差别。

    -l 列出文件内容符合指定的范本样式的文件名称。

    -L 列出文件内容不符合指定的范本样式的文件名称。

    -n 在显示符合范本样式的那一列之前,标示出该列的编号。

    -q 不显示任何信息。

    -R/-r 此参数的效果和指定“-d recurse”参数相同。  在多级目录中对文本进行递归搜索

    -s 不显示错误信息。

    -v 反转查找。

    -w 只显示全字符合的列。

    -x 只显示全列符合的列。

    -y 此参数效果跟“-i”相同。

    -o 只输出文件中匹配到的部分。


      a.txt文件

    a
    bb
    ccc
    dddd
    1a
    2b
    3d
    4a
    5a
    -A 1 表示找到所有匹配行,并显示所有匹配行后的一行
    在错误日志查找时还是很有用
    $ grep -A 1 b a.txt
    bb                //找到b了
    ccc              //显示bb这一行的后面一行
    --
    2b
    3d

    -B 1  表示找到所有匹配行,并显示所有匹配行的前面一行
    $ grep -B 1 b a.txt
    a
    bb             //匹配到b了,把bb这一行到前一行也显示出来
    --
    1a
    2b

    -C 1表示找到所有匹配行,并显示所有匹配行的前一行,后一行
    $ grep -C 1 b a.txt
    a
    bb             //匹配到b了,把a,ccc前后一行也显示出来
    ccc
    --
    1a
    2b
    3d

    -a 不要忽略二进制数据 表示把所有文件当作ASCII文件来处理 搜索二进制文件
    //a.pcap是一个tcpdump生成的文件,为binary文件,使用grep不能搜索
    
    $ grep "HOST" a.pcap
    Binary file a.pcap matches
    
    $ grep -a "HOST" a.pcap
    HOST: 239.255.255.250:1900
    HOST: 239.255.255.250:1900
    
    -b 表示显示match的字符串在文件中的offset  (标示出该行第一个字符的编号)
    $grep -b  a a.txt
    0:a
    14:1a        //表示这一行的a在文件中的offset为14
    23:4a
    26:5a
    
    
    -c 显示有多少行match的字符串(也就是有4行带a的)
    $grep -c a a.txt 
    4
    -e 后面跟一个正则表达式,指定多个正则表达式的时候很有用
    $grep -e [a] -e [0-2] a.txt     //匹配a   或者0,1,2 

       a
       1a
       2b
       4a
       5a

    pattern.txt

       a
       b
       0
       2

    -f可以指定pattern在我们的文件中   pattern文件中的每一行都会来进行匹配
    $grep -f pattern.txt  a.txt

       a
       bb
       1a
       2b
       4a
       5a

    -m 最多匹配几个后,就停止,这样速度会比较快
    $ grep -m 2 a a.txt
    a
    1a

    -n 匹配之后,在前面打印行号,这个还是有用的
    $ grep -n a a.txt
    1:a
    5:1a
    8:4a
    9:5a

    -o 只打印匹配的内容
    $ grep -o a a.txt
    a
    a
    a
    a
    
    
    //只能搜索当前目录
    $grep  a *
    a.txt:a
    a.txt:1a
    a.txt:4a
    a.txt:5a
    b.txt:aaa
    grep: cc: Is a directory      //碰到一个目录了

    $grep -R a *           //搜索子目录
    a.txt:a
    a.txt:1a
    a.txt:4a
    a.txt:5a
    b.txt:aaa
    cc/b.txt:a                  //这个目录也找到了
    
    
    -v  invert查找   下面为在a.txt中,查找不包含"a"的行 这个命令会经常使用
    $ grep -v a a.txt
    bb
    ccc
    dddd
    2b
    3d
    2

    -w  查找一个词
    
    word.txt
    it is a good day   //分成五个词,分别是it , is, a, good, day
    itis a goodday     //分成三个词,分别是itis, a,  goodday
    
    $ grep -w it word.txt   
    it is a good day
    
    $ grep -w good word.txt
    it is a good day

    ^pattern  表示开头处开始匹配
    grep "^i" word.txt 

     it is a good day
       itis a goodday


    grep "^is" word.txt //因为is不在行的开始处,所以没有匹配上


    pattern$ 从结尾处匹配       
    grep "is$" word.txt  . 为匹配任意单个字符 $ echo "it is" |grep "." it is $echo "it is" |grep "a." ".*" 匹配任意长度的任意字符 $ echo "it is" |grep ".*" it is $ echo "#" |grep ".*" //匹配任意字符,所以#也可以匹配 # "r.*h" //匹配一个字符串,其中有r,有h,且r在前,h在后,且r和h之间可以间隔任意长度的任意字符串,当然也可以没有间隔 $ echo "redhat" |grep "r.*h" redhat $ echo "rh" |grep "r.*h" rh $ echo "redhat" |grep "r.*b" "^r.*h$" //匹配一个字符串,其中r是第一个字符,h是最后一个字符,且r和h之间可以间隔任意长度的任意字符串,当然也可以没有间隔 $ echo "rh" |grep "^r.*h$" rh $ echo "redh" |grep "^r.*h$" redh $ echo "redhat" |grep "^r.*h$" //这里匹配不上 匹配指定范围内的任意字符 [e] 匹配任意单个字符 $ echo "redh" |grep "[e]" redh $ echo "redh" |grep "[s]" 匹配指定范围内的任意字符 [eh] 匹配e或h $ echo "redh" |grep "[eh]" redh $ echo "redh" |grep "[sh]" redh 匹配指定范围内的任意字符 [a-z],[1-3a-b] [1-3a-bX-Z] $ echo "redh" |grep "[a-d]" redh $ echo "redh" |grep "[d-f]" redh $ echo "redh" |grep "[d-a]" grep: invalid character range $ echo "redh" |grep "[f-f]" $ echo "redh" |grep "[a-z]" redh $ echo "redX" |grep "[x-x]" $ echo "redX" |grep "[X-X]" redX $ echo "redX" |grep "[a-Z]" grep: invalid character range $ echo "16" |grep "[1-2]" 16 $ echo "16" |grep "[5-8]" 16 $ echo "16" |grep "[1-9a-z]" 16 $ echo "b" |grep "[1-9a-z]" b $ echo "1xX" |grep "[1-1x-zX-X]" 1xX //[^] 匹配指定范围外的字符 $ echo "1" |grep "[^1-3]" //匹配非[1-3]的,不能匹配上 $ echo "2" |grep "[^1-3]" //匹配非[1-3]的,不能匹配上 $ echo "3" |grep "[^1-3]" //匹配非[1-3]的,不能匹配上 $ echo "4" |grep "[^1-3]" //匹配非[1-3]的,能匹配上 4 $ echo "a" |grep "[^1-3]" //匹配非[1-3]的 a $echo "a" |grep "[^1-3a-b]" $echo "a" |grep "[^1-3a-b]" //匹配非[1-3],非[a-b]的 ,匹配不上 $echo "c" |grep "[^1-3a-b]" //匹配非[1-3],非[a-b]的 ,匹配不上 c $echo "4" |grep "[^1-3a-b]" //匹配非[1-3],非[a-b]的 ,能匹配上 4 [[:space:]] 匹配空白字符 $ echo "a"|grep "[[:space:]]" $ echo "a b"|grep "[[:space:]]" a b ? 表示匹配前面的字符串0次或1次 $ echo "z"|grep "z(a?)" z $ echo "za"|grep "z(a?)" za $ echo "ab"|grep "z(a?)" //不匹配 {m,n} 匹配前面的字符串m到n次 $ echo "aa"|grep "a{1,3}" //匹配a,aa,aaa aa $ echo "aa"|grep "a{2,3}" aa $ echo "aa"|grep "a{3,4}" //不匹配 {2,} 匹配前面的字符串至少两次 $ echo "aa"|grep "a{1,}" aa $ echo "aa"|grep "a{2,}" aa $ echo "aa"|grep "a{3,}" //不匹配 <pattern1必须以pattern1开头 pattern2> 必须以pattern2结尾 $ echo "redhat"|grep "<r[1-9]*" redhat="" $="" echo="" "redhat"|grep="" "[a-z]*t="">" redhat $ echo "redhat"|grep "<r[a-z]*t>" redhat $ echo "zredhat"|grep "<r[a-z]*t>" //不匹配 $ echo "redhat"|grep "<r[1-9]*t>" //不匹配 $ echo "redhat"|grep "^r[a-z]*t$" //相当于这个 redhat () 用来进行分组, 下面这个就是匹配带有re和rea的 $ echo "redhat"|grep "(re)(a?)" redhat $ echo "zedhat"|grep "(re)(a?)" //匹配不上 + 表示匹配前面的字符串一次或多次 $ echo "zredhat"|grep "(re)(d+)" //匹配red,redd,reddd,redddd,... zredhat $ echo "zrehat"|grep "(re)(d+)" //匹配不上 | 表示或的关系 $ echo "d"|grep "(re)|(d+)" //匹配re 或者d,dd,ddd.. d $ echo "re"|grep "(re)|(d+)" re $ echo "a"|grep "(re)|(d+)" //没有匹配上
     
  • 相关阅读:
    高性能网站优化——兼容
    高性能网站优化——开发
    leetcode刷题日记: 19.删除链表的倒数第k个节点
    大数据处理技术学习
    <java复习>返回可变对象引用的get方法要点
    <C++网络编程随笔>常用Socket函数总结
    <leetcode每日一题>数组中的第K个最大元素
    <leetcode每日一题>二叉树的LCA查找
    codeforce round615 div3 B
    暑假作业竟然如此芳香(hdu4145枚举+贪心)
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/8056741.html
Copyright © 2020-2023  润新知