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会被删除, "<<"会原样输出

  • 相关阅读:
    UVA-11437 Triangle Fun
    UVA 10491
    CF 223C
    poj 3273
    由异常掉电问题---谈xfs文件系统
    好久没有写博客了,最近一段时间做一下总结吧!
    Json.Net
    div 旋转
    VirtualBox虚拟机网络设置
    windows 2003 安装 MVC 环境 404错误,无法找到该页
  • 原文地址:https://www.cnblogs.com/sunshine-2015/p/7096870.html
Copyright © 2011-2022 走看看