zoukankan      html  css  js  c++  java
  • linux 命令 — grep

    grep

    用于文本搜索,能接受文件或者stdin作为输入,能输出各种格式

    grep match_pattern filename
    搜索文件中出现match_pattern的行,match_pattern是一个通配符表达式

    grep word filename --color=auto
    --color,可以在输出中标记匹配到的单词

    使用正则表达式

    grep -E "[a-z]+"
    egrep "[a-z]+"
    使用-E允许隔热片使用扩展正则表达式,或者默认允许使用正则表达式的egrep

    echo this is a line. | grep -o -E "[a-z]+."
    输出:line.
    -o只输出匹配到的文本

    grep -v match_pattern file
    输出除匹配的行外的所有行

    grep -c "text" file
    输出匹配文本的行数(注意不是次数)

    echo -e "1 2 3 4 hello 5 6" | egrep -o "[0-9]" | wc -l
    输出匹配的次数
    -o:只输出匹配的文本
    wc -l:统计输出文本的行数,这里也就是匹配到的次数了

    grep -n match_pattern file
    输出匹配文本所在的行号和匹配到的行,如果是多个文件则会包括文件名称

    echo gnu is not unix | grep -b -o "not"
    输出:7:not
    -b: 输出匹配字符或者字节的偏移

    grep -l match_patten sample1.txt sample2.txt
    输出包含match_pattern文本的文件名称

    grep -L match_patten sample1.txt sample2.txt
    输出不包含match_pattern文本的文件名称

    递归搜索文件

    grep "text" . -R -n
    从当前目录开始递归搜索包含text文本的文件,输出文件名称:行号:匹配的行

    忽略样式中的大小写

    grep -i pattern file
    对pattern不区分大小写进行匹配

    匹配多个样式

    grep -e pattern1 -e pattern2 filename
    匹配多个pattern

    grep -F pattern_file filename
    使用pattern_file中多个模式进行匹配

    在搜索目录的时候包括或者排除文件

    grep pattern . -r --include *.{c,cpp}
    在当前目录下递归搜索的.c和.cpp文件中pattern,some{stirng1,string2}会扩展为somestring1,somestring2

    grep pattern . -r --exclude "README"
    在当前目录下递归搜索pattern,除了README文件

    使用--exclude-dir排除目录
    从文件中读取需要排除的文件名称列表: --exclude-from filename

    以0值字节作为分隔符输出

    grep pattern file* -lZ | xargs -0 rm
    搜索所有file开头的文件名称,并输出文件名,以0值字节作为分隔符,xargs使用0值字节作为分割将输入分割为多个参数传递给rm

    静默模式

    grep -q pattern filename
    不会产生输出,如果搜索到grep返回0,没有搜索到则返回非0,通过判断$?
    可以用判断文件是否存在指定模式的文本

    打印出文本匹配之前或者匹配之后的行

    seq 10 | grep 5 -A 3
    输出:
    5
    6
    7
    8
    -A 3:打印出搜索到文本之后的三行,第一行输出搜索到的行

    seq 10 | grep 8 -B 3
    输出:
    5
    6
    7
    8
    -B 3:打印出搜索到文本之前的三行,第四行输出搜索到的行

    seq 10 | grep 5 -C 2
    输出:
    3
    4
    5
    6
    7
    -C 2:打印出搜索到文本之前的两行,中间行输出匹配到的文本所在的行

    echo -e "a b c a b c" | grep a -A 1
    输出:
    a
    b

    a
    b
    当有多个匹配的时候,使用"--"作为分割输出

    cat

    输出文件内容

    cat << delimiter
    >first line
    >second line
    >delimiter
    

    输出:

    first line
    second line
    

    delimiter: 可以为任意合法字符,用来表示开始和结束,一般用EOF(注意这里的EOF和c里面的EOF不一样,这里仅仅是一个字符串表示,c里面表示一个宏,-1,当读到文件末尾的时候返回'EOF')
    最后一个delimiter前后不能有任何其他字符

    cat << delimiter > file
    >first line
    >second line
    >delimiter
    

    从标准输入读取输出到文件中

    cat <<- delimiter
    >for (i=1; i< 4; i++)
    >{
    >       print i;
    >}
    >delimiter
    

    输出:

    for (i=1; i< 4; i++)
    {
    print i;
    }
    

    <<- : 不会保留输入前面的tab会被删除, "<<"会原样输出

  • 相关阅读:
    Springboot 之 自定义配置文件及读取配置文件
    SQLSERVER系统视图 sql server系统表详细说明
    MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
    使用Ecplise git commit时出现"There are no stages files"
    maven添加sqlserver的jdbc驱动包
    java将XML文档转换成json格式数据
    java将XML文档转换成json格式数据
    cannot be resolved. It is indirectly referenced from required .class files
    org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value '2012-12-12 12:01:01': not a valid representation (error: Can not parse date "2012-12-
    @Autowired注解和静态方法 NoClassDefFoundError could not initialize class 静态类
  • 原文地址:https://www.cnblogs.com/sunshine-2015/p/7096870.html
Copyright © 2011-2022 走看看