• 文本处理grep命令


     1 this is a words file.
     2 words words to be 
     3 1 2, 3  4 , 5 , 5 6 , 6 , 7 , 7 , 8 , 8 9 , 9 , 10
     4 beginning linux programming 4th edition
     5 1000 222222 334 5 99999
     6 
     7 this is a line containing pattern
     8 ,.<>?;';;;' [] {= =   | -__!@#$%^&*() !@#$$%%^&*(()*&%@(#$%))
     9 
    10 www.regexper.com
    11 www.google.com
    12 www.baidu.com
    13 www.redhat.com

    我们的测试文件名字叫 n,如上所示,共13行。

    grep按行检索,按行输出。

    1, 搜索特定模式的行

    1 [lizhen@dhcp-128-93 shell]$ grep words n
    2 this is a words file.
    3 words words to be 
    4 [lizhen@dhcp-128-93 shell]$ 

    2,单个grep命令可以对多个文件进行检索

    [lizhen@dhcp-128-93 shell]$ grep words n n1 n2
    n:this is a words file.
    n:words words to be 
    n1:this is a words file.
    n1:words words to be 
    n2:this is a words file.
    n2:words words to be 
    [lizhen@dhcp-128-93 shell]$ 

    3,使用正则表达式,添加-E选项,或者直接egrep   (在terminal下可以看到这些被匹配的部分 是被红色 特殊显示的,这里显示的是被匹配到的 行)

    [lizhen@dhcp-128-93 shell]$ egrep "[a-o]+" n
    this is a words file.
    words words to be 
    beginning linux programming 4th edition
    this is a line containing pattern
    www.regexper.com
    www.google.com
    www.baidu.com
    www.redhat.com
    [lizhen@dhcp-128-93 shell]$ 

    4,只输出文件中匹配到的文本部分呢,使用-o

    [lizhen@dhcp-128-93 shell]$ grep words n
    this is a words file.
    words words to be 
    [lizhen@dhcp-128-93 shell]$ grep words n -o
    words
    words
    words
    [lizhen@dhcp-128-93 shell]$ 

    5,打印除包含match_pattern行之外的所有行,使用-v

    [lizhen@dhcp-128-93 shell]$ grep words n -v
    1 2, 3  4 , 5 , 5 6 , 6 , 7 , 7 , 8 , 8 9 , 9 , 10
    beginning linux programming 4th edition
    1000 222222 334 5 99999
    
    this is a line containing pattern
    ,.<>?;';;;' [] {= =   | -__!@#$%^&*() !@#$$%%^&*(()*&%@(#$%))
    
    www.regexper.com
    www.google.com
    www.baidu.com
    www.redhat.com
    [lizhen@dhcp-128-93 shell]$ 

    6,统计文件包含匹配字符串的行数,使用-c   (-c只统计匹配到的行数,并不会统计匹配到的次数)

    [lizhen@dhcp-128-93 shell]$ grep words n -c
    2
    [lizhen@dhcp-128-93 shell]$ grep words n 
    this is a words file.
    words words to be 
    [lizhen@dhcp-128-93 shell]$ 

    7,统计匹配到的字符串的数量,使用-o    |    wc -l

    [lizhen@dhcp-128-93 shell]$ grep -o words n | wc -l
    3
    [lizhen@dhcp-128-93 shell]$ grep words n
    this is a words file.
    words words to be 
    [lizhen@dhcp-128-93 shell]$ 

    8,打印出包含匹配字符串的行号,使用-n

    [lizhen@dhcp-128-93 shell]$ grep w -n n n1
    n:1:this is a words file.
    n:2:words words to be
    n:10:www.regexper.com
    n:11:www.google.com
    n:12:www.baidu.com
    n:13:www.redhat.com
    n1:1:this is a words file.
    n1:2:words words to be
    n1:10:www.regexper.com
    n1:11:www.google.com
    n1:12:www.baidu.com
    n1:13:www.redhat.com
    [lizhen@dhcp-128-93 shell]$

    9 打印模式匹配所位于的字符或字节偏移,使用-b  -o

    [lizhen@dhcp-128-93 shell]$ grep words n
    this is a words file.
    words words to be 
    [lizhen@dhcp-128-93 shell]$ grep words -b -o n
    10:words
    22:words
    28:words
    [lizhen@dhcp-128-93 shell]$ 

    10,搜索多个文件并找出文本位于哪一个文件中,使用-l

    [lizhen@dhcp-128-93 shell]$ grep words n n1
    n:this is a words file.
    n:words words to be 
    n1:this is a words file.
    n1:words words to be 
    [lizhen@dhcp-128-93 shell]$ grep words -l n n1
    n
    n1
    [lizhen@dhcp-128-93 shell]$ 

    使用-L  大写的L字符,取相反的结果

    [lizhen@dhcp-128-93 shell]$ grep words n n1
    n:this is a words file.
    n:words words to be 
    n1:this is a words file.
    n1:words words to be 
    [lizhen@dhcp-128-93 shell]$ grep words -l n n1
    n
    n1
    [lizhen@dhcp-128-93 shell]$ grep words -L n n1
    [lizhen@dhcp-128-93 shell]$ 

    11,递归搜索文件,使用-R -n  (-n选项表示显示所在文件名:行号)

    [lizhen@dhcp-128-93 shell]$ grep words . -R -n
    ./n:1:this is a words file.
    ./n:2:words words to be 
    ./n1:1:this is a words file.
    ./n1:2:words words to be 
    ./n2:1:this is a words file.
    ./n2:2:words words to be 
    [lizhen@dhcp-128-93 shell]$ 

    12,忽略样式中的大小写,使用-i

    [lizhen@dhcp-128-93 shell]$ grep WORDS -i n
    this is a words file.
    words words to be 
    [lizhen@dhcp-128-93 shell]$ 

    13,使用grep匹配多个样式,使用-e

    [lizhen@dhcp-128-93 shell]$ grep -e words  -e www -o n
    words
    words
    words
    www
    www
    www
    www
    [lizhen@dhcp-128-93 shell]$

    14,使用样式文件,利用grep逐行读取样式文件,grep会将匹配到的行输出

    [lizhen@dhcp-128-93 shell]$ grep -f f n
    this is a words file.
    words words to be 
    1 2, 3  4 , 5 , 5 6 , 6 , 7 , 7 , 8 , 8 9 , 9 , 10
    1000 222222 334 5 99999
    www.regexper.com
    www.google.com
    www.baidu.com
    www.redhat.com
    [lizhen@dhcp-128-93 shell]$ 

    15,在grep搜索中指定或排除文件

    # grep "main()" . -r --include *.{c,cpp}

    #grep "main()" . -r --exclude "readme"

    16,grep 的静默输出,使用-q

    #########################################################################
    # File Name: begin.sh
    # Author: lizhen
    # mail: lizhen_ok@163.com
    # Created Time: Wed 18 May 2016 08:29:32 PM CST
    #########################################################################
    #!/bin/bash
    if [ $# -ne 2  ]
    then
        echo "usage: $0 match_text filename"
        exit 1
    fi
    
    match_text=$1
    filename=$2
    grep -q "$match_text" $filename
    
    if [ $? -eq 0 ]
    then
        echo "The text exists in the file"
    else
        echo "text does not exist in the file"
    fi
    
    echo "done!"
    [lizhen@dhcp-128-93 shell]$ ./begin.sh words n
    The text exists in the file
    done!
    [lizhen@dhcp-128-93 shell]$ 

    17,打印匹配行之前或之后的行,使用-B,-A,-C选项

    [lizhen@dhcp-128-93 shell]$ grep www -B 3 n
    this is a line containing pattern
    ,.<>?;';;;' [] {= =   | -__!@#$%^&*() !@#$$%%^&*(()*&%@(#$%))
    
    www.regexper.com
    www.google.com
    www.baidu.com
    www.redhat.com
    [lizhen@dhcp-128-93 shell]$ grep www -B 1 n
    
    www.regexper.com
    www.google.com
    www.baidu.com
    www.redhat.com
    [lizhen@dhcp-128-93 shell]$ grep www n
    www.regexper.com
    www.google.com
    www.baidu.com
    www.redhat.com
    [lizhen@dhcp-128-93 shell]$ 
    [lizhen@dhcp-128-93 shell]$ grep words -A  1 n
    this is a words file.
    words words to be 
    1 2, 3  4 , 5 , 5 6 , 6 , 7 , 7 , 8 , 8 9 , 9 , 10
    [lizhen@dhcp-128-93 shell]$ 
    [lizhen@dhcp-128-93 shell]$ grep 2222 n
    1000 222222 334 5 99999
    [lizhen@dhcp-128-93 shell]$ grep 2222 n -C 1
    beginning linux programming 4th edition
    1000 222222 334 5 99999
    
    [lizhen@dhcp-128-93 shell]$ 
    
    
    
  • 相关阅读:
    内存分配机制
    typedef struct 和struct的区别
    imshow
    #include<string.h>和#include<string>
    Internal Errors
    TStopWatch 基本知识
    string 新常量 Empty
    System 这四个单元多用用(近期)
    对象释放三种方法对比:Free --> FreeAndNil() --> DisposeOf()
    程序性能优化的3个级别
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5506676.html
Copyright © 2020-2023  润新知