• 【操作系统之五】Linux常用命令之grep


    一、概念
    grep(Global search Regular Expression and Print out the line)强大的文本搜索工具,从文本文件或管道数据流中筛选匹配的行及数据,并把匹配的行/特定内容打印出来。

    二、grep命令格式

    grep [参数] [匹配模式] [查找的文件]

    1、参数:

    举例演示说明:

    [root@PCS101 ~]# cat testgrep
    zsy test
    zsythink
    
    www.zsythink.com
    TEST 123
    Zsy's articles
    grep Grep
    abc
    abc123abc
    123zsy123

    (1)-i,–ignore-case:忽略Pattern 和文件内容的大小写,默认情况下,grep是区分大小写的.

    [root@PCS101 ~]# grep "test" testgrep
    zsy test
    [root@PCS101 ~]# grep -i "test" testgrep
    zsy test
    TEST 123

    (2)-o:只打印匹配到的关键字,如果一行有多处匹配到也会分行来打印
    -n –line-number 显示行号

    [root@PCS101 ~]# grep -i "123" testgrep
    TEST 123
    abc123abc
    123zsy123
    [root@PCS101 ~]# grep -i -n -o "123" testgrep
    5:123
    9:123
    10:123
    10:123
    [root@PCS101 ~]# grep -i -n "test" testgrep
    1:zsy test
    5:TEST 123

    (3)-c 打印匹配到的总行数

    [root@PCS101 ~]# grep -i -c "test" testgrep
    2

    (4)--color=auto 很有用,你看的出来

    [root@PCS101 ~]# grep -i -n --color "test" testgrep
    1:zsy test
    5:TEST 123

    (5)-Bn:输出匹配行之前的n行;-An:输出匹配行之后的n行;-Cn输出匹配行前后各n行

    [root@PCS101 ~]# grep -B2 "www" testgrep
    zsythink
    
    www.zsythink.com
    [root@PCS101 ~]# grep -A3 "www" testgrep
    www.zsythink.com
    TEST 123
    Zsy's articles
    grep Grep
    [root@PCS101 ~]# grep -C3 "www" testgrep
    zsy test
    zsythink
    
    www.zsythink.com
    TEST 123
    Zsy's articles
    grep Grep

    (6)-w –word-regexp:只选择匹配上整个单词时输出

    [root@PCS101 ~]# grep "zsy" testgrep
    zsy test
    zsythink
    www.zsythink.com
    123zsy123
    [root@PCS101 ~]# grep -w "zsy" testgrep
    zsy test

    (7)-v –invert-match:取没有匹配的行

    [root@PCS101 ~]# grep -v "zsy" testgrep
    
    TEST 123
    Zsy's articles
    grep Grep
    abc
    abc123abc

    (8)-e:根据不同的匹配模式来匹配

    [root@PCS101 ~]# grep -e "abc" -e "test" testgrep
    zsy test
    abc
    abc123abc

    (9)-q:静默模式 当只关心某文件是否含有某个字符时 不关心匹配的行,需要使用echo $?输出0表示匹配到;输出1表示未匹配到

    [root@PCS101 ~]# grep -q "test" testgrep
    [root@PCS101 ~]# echo $?
    0
    [root@PCS101 ~]# grep -q "ttttttt" testgrep
    [root@PCS101 ~]# echo $?
    1

    (10)用grep -r递归搜索全部的文件
    如果想查找当前目前以及其子目录的全部文件时,可以使用 -r 选项。如下例

    [root@PCS101 ~]# grep -r "abc def" * 
    ddd/t1.txt:abc def hij klm
    pcre-8.40/testdata/testoutput4:    abc defx{442}x{443}xyz
    pqr
    pcre-8.40/testdata/testoutput4:    abc defx{442}x{443}xyz
    pqr
    pcre-8.40/testdata/testinput4:    abc defx{442}x{443}xyz
    pqr
    pcre-8.40/testdata/testinput4:    abc defx{442}x{443}xyz
    pqr

    (11)用grep -l 只显示符合匹配条件的文件名

    [root@PCS101 ddd]# grep -l "abc def" * 
    t1.txt

    (12)grep默认使用基本正则表达式

    egrep表示支持扩展正则表达式,相当于 grep -E;
    grep -P 表示支持perl兼容的正则表达式;
    fgrep表示不支持正则表达式,只能匹配写死的正则表达式,但是效率快;

    2、匹配模式
    匹配模式是你要好找的东西,可以是普通的文字符号也可以是正则表达式。

    (1)扩展正则表达式在基本正则表达式上进行了修改,主要取消反斜线转移,更容易看

    字符匹配:
    .: 任意单个字符
    []: 指定范围内的任意单个字符
    [^]: 指定范围外的任意单个字符
    
    次数匹配:
    *:匹配其前面的字符任意次;
    ?: 匹配其前面的字符0或1次;
    +: 匹配其前面的字符至少1次
    {m}: 匹配其前面的字符m次;
    {m,n}: 至少m次,至多n次
    {m,}: 至少m次;
    {0,n}:至多n次;
    
    锚定:
    ^: 行首
    $: 行尾
    <, : 词首
    >, :词尾
    
    分组:
    (): 分组
    |: 或者, ac|bc
    grep -E "con(C|c)at" 匹配conCat或concat

    (2)基本正则表达式

    匹配次数
    *:前一个字符出现任意次数,包括0次
    .* :任意字符出现任意次数
    ?:前一个字符出现1次或者0次
    +:出现1次或者1次以上
    {n}:精确匹配次数
    {m,n}:匹配m到n次之间
    {n,} :匹配最少n次以上
    {,n} :匹配最多n次以上
    [a-z]+ : 任意一个字符至少出现一次 ; 
    . 在[]中没有任何意义,就是点本身
    
    位置锚定
    ^ : 匹配行首
    $ ; 匹配行尾
    ^$: 匹配空白行
    [^]:取反匹配
    
    分组
    (匹配内容) :匹配括号内的内容
    
     (数字) :重复前面匹配的内容再匹配

    参考:

    正则表达式应用案例

  • 相关阅读:
    json对象和字符串的相互转换
    使用link rel="shortcut icon"为网页标题加图标
    jQuery——Js与jQuery的相互转换
    用accessKey设置快捷键
    CSS :invalid 选择器
    创建并调用 DLL(1)
    调用外部 DLL 中的函数(2. 晚绑定)
    调用外部 DLL 中的函数(1. 早绑定)
    VCL 中的 Windows API 函数(6): BeginDeferWindowPos
    VCL 中的 Windows API 函数(5): AlphaBlend
  • 原文地址:https://www.cnblogs.com/cac2020/p/11770952.html
Copyright © 2020-2023  润新知