美文网首页已收录(2017-8-15)码农的世界工具癖
grep——高逼格 Linux文本搜索神器

grep——高逼格 Linux文本搜索神器

作者: 蓝色小石头 | 来源:发表于2018-04-18 17:21 被阅读89次

    一句话,如果你只记得某个文件中的几个词,怎么锁定字串所在的目录。

    用软件就 low 了,咱们用 mac 苹果电脑的主当然是直接敲命令行显逼格了,不用怕是灰常简单实用的命令行。

    grep 命令--简单、好用、显逼格

    如果想根据文件名查找文件路径,可以看我的这篇文章
    find—— 高逼格Linux\Mac文件目录查找神器,搭配使用效果更佳。

    // 终端:当前目录下的所有文件,包含“你好”字串的文件有多少、目录在哪、在这个文件的哪一行?
    
    grep -rne "你好" .
    

    What

    grep是什么鬼?

    grep(Globally search a Regular Expression and Print):一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行

    关于 grep 的详细细节可以查看 grep 的官方文档

    When

    我们都知道在 lunix 系统中“一切皆文件”,那么在终端偌大的磁盘数不清的文件中,你想要的文件究竟在哪呢?

    grep:
    根据文件中文本行(部分或完整)查找相应文件

    Know-how

    总体命令格式

    grep [选项]  [模式]  [input_file_names]
    
    命令 参数 作用
    -a -- 不要忽略二进制数据
    -A <显示列数> 除了显示符合范本样式的那一行之外,并显示该行后的内容
    -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 -- 只输出文件中匹配到的部分

    1、命令行选项

    • 基本信息
    • 匹配控制
    • 输出控制
    • 输出路径前缀
    • 上下文行控制
    • 文件目录选择
    1.1、 基本信息命令

    帮助

    --help
    

    版本信息

    -V   
    --version
    
    bogon:Desktop guoxiangyang$ grep --version
    grep (BSD grep) 2.5.1-FreeBSD
    
    1.2、 匹配控制
    • 指定字符串作为匹配文本,查找文本在文件中的位置
    grep -e <pattern>
    --regexp=pattern
    

    查找README.md文件中“collection”字串

    bogon:YYKit guoxiangyang$ grep -e "collection" README.md
    YYKit is a collection of iOS components.
    
    • 范本样式为固定字符串
    grep -F
    
    bogon:YYKit guoxiangyang$ grep -F collecti  README.md README1.md
    README.md:YYKit is a collection of iOS components.
    
    • 以文件为单位,多个文件进行匹配查找
      事先将要搜寻的样式写入到一个档案,一行一个样式。然后采用档案搜寻。 空的档案表示没有要搜寻的样式,因此也就不会有任何符合。
    // newfile为搜寻样式文件
    grep -f <newfile>  <file>
    
    • 查找时忽略字符大小写
    -i
    -y
    --ignore-case
    
    • 反转查找
    -v
    --invert-match
    
    • 只显示全字符符合的列
    -w
    --word-regexp
    
    • 只显示全列符合的列
    -x
    --line-regexp
    
    1.3、 基本输出控制
    • 输出数字,统计匹配样本的行数
    -c
    -count
    
    bogon:YYKit guoxiangyang$ grep -c "CocoaPods" README.md
    6
    
    • 给输出的匹配文本加颜色
    --color
    
    grep --color=auto 
    
    • 列出文件内容符合匹配文本的文件名称
    -l
    --files-with-matches
    
    grep -l <pattern> file1 file2 ...
    
    • 列出文件内容不符合匹配文本的文件名称
    -L
    --files-without-match
    
    grep -L <pattern> file1 file2 ...
    
    • 只输出文件中匹配到的部分
    -o
    --only-matching
    
    bogon:YYKit guoxiangyang$ grep  "CocoaPods" -o  README.md README1.md
    README.md:CocoaPods
    README.md:CocoaPods
    
    1.4、 输出前缀控制
    • 当要输出多个前缀字段时,不管这些选项的指定顺序如何,顺序始终是文件名:行号:字节偏移量。
    -b
    --byte-offset
    
    bogon:YYKit guoxiangyang$ grep  "CocoaPods" -b  README.md README1.md
    README.md:2252:### CocoaPods
    
    • 在每行输出前打印文件名,当有多个文件时默认打印文件名
    -H
    --with-filename
    
    • 在每行输出前加上匹配文本所在的行号
    -n
    --line-number
    
    1.5、 上下文本行控制
    • 除了显示符合范本样式的那一行之外,并显示该行之后的内容
    -A <num>
    --after-context=<num>
    
    // 匹配"CocoaPods",并输出之后的2行
    grep  "CocoaPods" -A2  README.md README1.md
    
    • 在显示符合范本样式的那一行之外,并显示该行之前的内容
    -B <num>
    --before-context=<num>
    
    • 在显示符合范本样式的那一行之外,并显示该行之前、之后行的内容
    -C <num>
    -<num>
    --context=<num>
    
    1.6、 文件和目录选择
    • 不要忽略二进制文件
    -a
    --text
    
    • 指定查找范围是目录时必用
    -d recurse
    -R   --dereference-recursive
    -r    --recursive
    
    // 当前目录下查找匹配"CocoaPods",无需指定文件名
    grep  "CocoaPods" -r  .
    

    引用相关

    grep 官方文档
    grep命令
    linux中的grep命令用法

    相关文章

      网友评论

        本文标题:grep——高逼格 Linux文本搜索神器

        本文链接:https://www.haomeiwen.com/subject/fabihftx.html