热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

grep用法大全&&grep常用用法总结

  Linux系统中,grep命令通常用来实现行的过滤。用法汇总如下。一、使用方式1、直接查询文件中的行:  grep[OPTION]PATTERN[FILE]2、用在

    Linux系统中,grep命令通常用来实现行的过滤。用法汇总如下。


一、使用方式

1、直接查询文件中的行:

    grep [OPTION]... PATTERN [FILE]...

2、用在管道符“|”后面,过滤来自标准输入的信息,例如:

    查询8000端口的TCP连接数:netstat -nat | grep -i "8000" | wc -l

    输出文件text.txt中以"2019"开头的行到text2.txt:cat text.txt | grep '^2019' > text2.txt


二、选项汇总

1、正则相关的选项

    正则相关的选项,指的是这些选项是作用于grep后面加的正则表达式的。包括:



  • -E, --extended-regexp     PATTERN is an extended regular expression (ERE):正则的类型是拓展的正则表达式

  • -F, --fixed-strings       PATTERN is a set of newline-separated fixed strings:正则是换行符分割的字符串集合

  • -G, --basic-regexp        PATTERN is a basic regular expression (BRE):正则的类型是普通的正则表达式(默认)

  • -P, --perl-regexp         PATTERN is a Perl regular expression:正则的类型是Perl正则表达式

  • -e, --regexp=PATTERN      use PATTERN for matching:使用参数后面的正则进行匹配

  • -f, --file=FILE           obtain PATTERN from FILE:从目标文件中获取正则进行匹配

  • -i, --ignore-case         ignore case distinctions:忽略大小写的不同

  • -w, --word-regexp         force PATTERN to match only whole words:全字符匹配,即目标行中匹配正则范本的必须是一个完整的词

  • -x, --line-regexp         force PATTERN to match only whole lines:整行匹配,要求目标行整行必须匹配正则范本

  • -z, --null-data           a data line ends in 0 byte, not newline:以字节0而不是换行符结尾的数据行


2、输出控制相关的选项

    输出控制相关的选项,指的是输出到目标的时候需要做的操作,包括:



  • -m, --max-count=NUM       stop after NUM matches:输出的最大行数

  • -b, --byte-offset         print the byte offset with output lines:每一行输出的时候,行前偏移的字节数

  • -n, --line-number         print line number with output lines:在输出行的前面输出行号

  •     --line-buffered       flush output on every line:每一行输出后都清除缓存

  • -H, --with-filename       print the file name for each match:在每一个匹配的行前打印文件名

  • -h, --no-filename         suppress the file name prefix on output:禁止输出文件名前缀。文件名前缀来源参考上面一条

  •     --label=LABEL         use LABEL as the standard input file name prefix:使用LABEL作为输出文件名的前缀

  • -o, --only-matching       show only the part of a line matching PATTERN:只显示行中匹配正则表达式的部分

  • -q, --quiet, --silent     suppress all normal output:禁止所有的正常输出

  •     --binary-files=TYPE   assume that binary files are TYPE:假定二进制文件的类型是TYPE

  •                           TYPE is 'binary', 'text', or 'without-match'

  • -a, --text                equivalent to --binary-files=text:等效于--binary-files=text

  • -I                        equivalent to --binary-files=without-match:等效于--binary-files=without-match

  • -d, --directories=ACTION  how to handle directories;

  •                           ACTION is 'read', 'recurse', or 'skip':如何处理目录

  • -D, --devices=ACTION      how to handle devices, FIFOs and socket;

  •                           ACTION is 'read' or 'skip':如何处理设备、管道流和套接字

  • -r, --recursive           like --directories=recurse:类似于--directories=recurse

  • -R, --dereference-recursive  likewise, but follow all symlinks:类似于'-r'与'-d recurse', 但是使用符号链接

  •     --include=FILE_PATTERN  search only files that match FILE_PATTERN:只搜索匹配FILE_PATTERN的文件

  •     --exclude=FILE_PATTERN  skip files and directories matching FILE_PATTERN:跳过匹配FILE_PATTERN的文件和目录

  •     --exclude-from=FILE   skip files matching any file pattern from FILE:跳过匹配任意FILE中包含的文件范式

  •     --exclude-dir=PATTERN  directories that match PATTERN will be skipped.:跳过匹配PATTERN的目录

  • -L, --files-without-match  print only names of FILEs containing no match:打印出文件内容出包含不符合文件范式的文件的文件名

  • -l, --files-with-matches  print only names of FILEs containing matches:打印出文件内容出包含符合文件范式的文件的文件名

  • -c, --count               print only a count of matching lines per FILE:计算每个文件中符合正则范式的的行数

  • -T, --initial-tab         make tabs line up (if needed):对齐标签

  • -Z, --null                print 0 byte after FILE name:在文件名后面输出字节0


3、上下文控制相关的选项

    上下文控制相关的一些选项,里面涉及到一些回车和换行符,不理解二者关系和在不同操作系统中使用情况的童鞋可以看这里:不同操作系统下的回车符和换行符



  • -B, --before-cOntext=NUM  print NUM lines of leading context:打印内容包含匹配行前面的NUM行信息

  • -A, --after-cOntext=NUM   print NUM lines of trailing context:打印内容包含匹配行后面的NUM行信息

  • -C, --cOntext=NUM         print NUM lines of output context:打印内容包含匹配行前面和后面的NUM行信息

  • -NUM                      same as --cOntext=NUM:类似于--cOntext=NUM,即上面一条配置

  •     --color[=WHEN],

  •     --colour[=WHEN]       use markers to highlight the matching strings;:使用高亮来标记匹配的内容,

  •                           WHEN is 'always', 'never', or 'auto':WHEN指的是标记的时机,内容是'always', 'never', or 'auto'

  • -U, --binary              do not strip CR characters at EOL (MSDOS/Windows):不要在换行符中去掉回车符(用于MSDOS/Windows操作系统)

  • -u, --unix-byte-offsets   report offsets as if CRs were not there (MSDOS/Windows):在忽略MSDOS/Windows操作系统中的回车符的前提下记录偏移量


4、其他选项

    还有一些很难被分类的选项,包括:



  •   -s, --no-messages         suppress error messages:禁用错误输出信息

  •   -v, --invert-match        select non-matching lines:选择不匹配的行

  •   -V, --version             print version information and exit:打印版本信息并退出

  •       --help                display this help and exit:显示grep的帮助文档并退出


三、常用用法

1、常用选项

    上面的选项非常多,但是其实常用的很少,主要包括下面这些:

    常用选项如下:



  • -a、--text :将二进制文件以文本文件的方式搜寻数据

  • -c 、--count:计算找到 '搜寻字符' 的次数

  • -i、--ignore-case、--binary-files=text:忽略大小写的不同,所以大小写视为相同

  • -n、--line-number:number,顺便输出行号

  • -v 、--invert-match:反向选择,亦即显示出没有 '搜寻字符' 内容的那一行

  • --binary-files=TYPE:假定二进制文件是TYPE格式的,TYPE包括:'binary', 'text', or 'without-match'

  • --color=auto :可以将找到的关键词部分加上颜色的显示

  • -m, --max-count=NUM:输出的最大行数

  • -A:

  • -B:

  • -C:


2、过滤多个关键字:“与”和“或”

1、“与”操作

    与逻辑可以通过增加管道流操作来实现。例如如果需要打印出文件test.txt中匹配同时包含“abc"和"123"的行,可以用如下方式:

cat test.txt | grep "abc" | grep "123"

2、“或”操作

    或逻辑可以通过修改正则表达式来实现。例如例如如果需要打印出文件test.txt中匹配包含“abc"或者包含"123"的行,可以用如下方式:

cat test.txt | grep "abc|123"

3、单引号和双引号

    双引号:双引号是部分引用,如果引号中包含命令会先解析出来,例如"$num",会去解析遍历num的值。

    单引号:单引号是全部引用,即引号中包含什么就作为什么字符串,例如'$num',会当做字符串内容为$num四个字符的字符串来处理。


四、常用语法总结(持续更新)

    这里总结一些平时用到的有趣的例子,持续更新。



  1. 过滤以“abc”开头的行:grep "^abc"

  2. 过滤不包含"abc"的行:grep -v "abc"

  3. 过滤包含"abc"的行并查看最后两行:grep "adb" | tail -n 2

  4. 过滤包含"abc"的行并查看最前面一行:grep -m 1  "adb"

  5. 过滤包含"abc"的行并查看第一项(和上面的区别是,如果如果第一行有多个匹配项,上面会显示整行,这里只会显示第一行的第一项):grep -m 1  "adb"  |  head 1

  6. 过滤包含"abc"的行并显示前面两行和后面三行:grep -B2 -A3 "adb"

  7. 过滤包含"abc"的行并显示前面两行和后面两行:grep -C2 "adb"



推荐阅读
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
author-avatar
阳光因你我而灿烂
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有