egrep命令

egrep命令用于模式搜索,属于grep函数族,工作原理和grep -E一样,其将模式视为扩展正则表达式,并打印出与模式匹配的行,如果有多个文件具有匹配的模式,其还能显示每行的文件名。

语法

egrep [options] PATTERN [FILE...]

参数

  • -A NUM, --after-context=NUM: 在匹配行之后打印尾部上下文的NUM行,在相邻的匹配组之间放置包含--的行。
  • -a, --text: 像处理文本一样处理二进制文件,这相当于--binary files=text选项。
  • -B NUM, --before-context=NUM: 在匹配行之前打印前导上下文的NUM行,在相邻的匹配组之间放置包含--的行。
  • -C NUM, --context=NUM: 打印输出上下文的NUM行,在相邻的匹配组之间放置包含--的行。
  • -b, --byte-offset: 打印输入文件中每行输出之前的字节偏移量。
  • --binary-files=TYPE: 如果文件的前几个字节指示该文件包含二进制数据,则假定该文件为类型类型。默认情况下,TYPEbinarygrep通常输出一行消息,说明二进制文件匹配,或者不输出消息(如果不匹配)。如果TYPE不匹配,grep假设二进制文件不匹配,这相当于-I选项。如果TYPEtextgrep会像处理文本一样处理二进制文件,这相当于-a选项。此外grep--binary files=text可能会输出二进制垃圾,如果输出是终端,并且终端驱动程序将其中的一些解释为命令,则会产生严重的副作用。
  • --colour[=WHEN], --color[=WHEN]: 在匹配字符串周围加上标记find in GREP_COLOR环境变量,WHEN可以是neveralwaysauto
  • -c, --count: 禁止正常输出,而是为每个输入文件打印匹配行的计数,使用-v,--invert match选项,计算不匹配的行数。
  • -D ACTION, --devices=ACTION: 如果输入文件是设备、FIFO或套接字,使用ACTION 来处理它。默认情况下,ACTIONread,这意味着设备的读取就像它们是普通文件一样,如果ACTIONskip,则设备将自动跳过。
  • -d ACTION, --directories=ACTION: 如果输入文件是目录,使用ACTION来处理它。默认情况下,ACTIONread,这意味着目录的读取就像它们是普通文件一样,如果ACTIONskip,则目录将被自动跳过,如果ACTION是递归的,grep将递归地读取每个目录下的所有文件,这相当于-r选项。
  • -e PATTERN, --regexp=PATTERN: 使用PATTERN作为模式,用于保护以-开头的模式。
  • -F, --fixed-strings: 将PATTERN解释为固定字符串的列表,用换行符分隔,这些字符串可以匹配。
  • -P, --perl-regexp: 将PATTERN解释为Perl正则表达式。
  • -f FILE, --file=FILE: 从FILE获取模式,每行一个,空文件包含零个模式,因此不匹配。
  • -G, --basic-regexp: 将PATTERN解释为基本正则表达式,这是默认值。
  • -H, --with-filename: 打印每个匹配项的文件名。
  • -h, --no-filename: 当搜索多个文件时,禁止在输出中使用文件名前缀。
  • --help: 显示帮助文件。
  • -I: 处理二进制文件,就像它不包含匹配数据一样,这相当于--binary-files=without-match选项。
  • -i, --ignore-case: 忽略PATTERN和输入文件中的大小写区别。
  • -L, --files-without-match: 禁止正常输出,而是打印通常不会从中打印输出的每个输入文件的名称,扫描将在第一个匹配时停止。
  • -l, --files-with-matches: 禁止正常输出,而是打印通常从中打印输出的每个输入文件的名称,扫描将在第一个匹配时停止。
  • -m NUM, --max-count=NUM: 在匹配行数之后停止读取文件。如果输入是来自常规文件的标准输入,并且输出NUM个匹配行,grep确保标准输入在退出之前定位到最后一个匹配行之后,而不管是否存在后续上下文行。这使调用进程能够继续(恢复)搜索,当grep在NUM个匹配行之后停止时,它输出任何后面的上下文行。当-c--count选项也被使用时,grep不会输出大于NUM的计数。当-v--invert match选项也被使用时,grep会在输出NUM个不匹配的行之后停止。
  • --mmap: 如果可能,使用mmap系统调用来读取输入,而不是默认的读取系统调用。在某些情况下,--mmap可以产生更好的性能。但是,如果在grep操作时输入文件收缩,或者发生I/O错误,那么--mmap可能会导致未定义的行为(包括核心转储)。
  • -n, --line-number: 在输出的每一行前面加上输入文件中的行号。
  • -o, --only-matching: 只显示匹配行中与模式匹配的部分。
  • --label=LABEL: 将实际来自标准输入的输入显示为来自文件LABEL的输入。这对于zgrep之类的工具尤其有用,例如gzip -cd foo.gz | grep -H --label = foo
  • --line-buffered: 使用行缓冲,这可能会导致性能损失。
  • -q, --quiet, --silent: 保持安静,不向标准输出写入任何内容。如果找到任何匹配项,即使检测到错误,也立即退出,状态为零。
  • -R, -r, --recursive: 递归地读取每个目录下的所有文件,这相当于-d recurse选项。
  • -s, --no-messages: 禁止显示有关不存在或不可读文件的错误消息。
  • -U, --binary: 将文件视为二进制文件。默认情况下,在MS-DOSMS Windows下,grep通过查看从文件中读取的第一个32KB的内容来猜测文件类型。如果grep确定文件是文本文件,它将从原始文件内容中删除CR字符(以使带有^$的正则表达式正常工作)。指定-U会推翻这种猜测,导致读取所有文件并逐字传递给匹配机制,如果文件是一个文本文件,每行末尾都有CR/LF对,这将导致某些正则表达式失败。此选项对MS-DOSMS Windows以外的平台无效。
  • -u, --unix-byte-offsets: 报告Unix样式的字节偏移量,此开关使grep报告字节偏移,就好像该文件是Unix样式的文本文件一样,即去除了CR字符。这将产生与在Unix机器上运行grep相同的结果,除非也使用-b选项,否则该选项无效。它对除MS-DOSMS-Windows以外的平台没有影响。
  • -V, --version: 输出版本信息。
  • -v, --invert-match: 反转匹配的意义,以选择不匹配的行。
  • -w, --word-regexp: 只选择与表单中包含的单词匹配的行。测试是匹配的子串必须在行的开头,或者前面有非单词组成字符,同样,它必须位于行的末尾,或者后跟非单词组成字符。单词组成字符是字母、数字和下划线。
  • -x, --line-regexp: 仅选择与整行完全匹配的那些匹配项。
  • -Z, --null: 输出零字节(ASCII NULL字符),而不是通常在文件名后的字符。例如grep -lZ在每个文件名之后输出一个零字节,而不是通常的换行符。即使存在包含不寻常字符(例如换行符)的文件名,此选项也可以使输出明确。此选项可与find -print0perl -0sort -zxargs -0等命令一起使用,以处理任意文件名,即使是包含换行符的文件名。

示例

hello.c文件内容如下:

#include <stdio.h>
#include <stdlib.h> int main() {
printf("Hello World\n");
printf("Hello World\n");
printf("Hello World\n");
return 0;
}

匹配带有Hello的行。

egrep Hello hello.c
# printf("Hello World\n");
# printf("Hello World\n");
# printf("Hello World\n");

匹配带有Hello行的数量。

egrep -c Hello hello.c
# 3

反转匹配的意义,选择不匹配Hello的行。

egrep -v Hello hello.c
# #include <stdio.h>
# #include <stdlib.h>
#
# int main() {
# return 0;
# }

匹配带有i的行并忽略大小写。

egrep -i I hello.c
# #include <stdio.h>
# #include <stdlib.h>
# int main() {
# printf("Hello World\n");
# printf("Hello World\n");
# printf("Hello World\n");

仅输出与文件整行匹配的行。

egrep -x "   return 0;" hello.c
# return 0;

匹配带有Hello的行并输出行号。

egrep -n Hello hello.c
# 5: printf("Hello World\n");
# 6: printf("Hello World\n");
# 7: printf("Hello World\n");

递归匹配当前目录下所有文件中能够匹配h*的文件,输出行号并忽略大小写,注意实际在终端中匹配成功的位置会使用红色字体标注。

egrep -rni "h*" ./
# ./hello.c:1:#include <stdio.h>
# ./hello.c:2:#include <stdlib.h>
# ./hello.c:3:
# ./hello.c:4:int main() {
# ./hello.c:5: printf("Hello World\n");
# ./hello.c:6: printf("Hello World\n");
# ./hello.c:7: printf("Hello World\n");
# ./hello.c:8: return 0;
# ./hello.c:9:}

每日一题

https://github.com/WindrunnerMax/EveryDay

参考

https://www.computerhope.com/unix/uegrep.htm
https://www.runoob.com/linux/linux-comm-egrep.html
https://www.geeksforgeeks.org/egrep-command-in-linux-with-examples/

egrep命令的更多相关文章

  1. Linux grep/egrep命令详解

    grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来 grep搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2. grep的规则表达式( ...

  2. grep、egrep命令用法

    何谓正则表达式 正则表达式,又称正规表示法.常规表示法(Regular Expression,在代码中常简写为regex.regexp或RE),是一类字符所书写的模式,其中许多字符不表示其字面意义,而 ...

  3. egrep命令的实现 分类: 编译原理 2014-06-01 23:41 329人阅读 评论(0) 收藏

    本程序实现了egrep命令,首先将正则表达式转换为NFA,并实现模拟NFA的算法. 本程序使用flex实现词法分析,bison实现语法分析 若给定的一行字符串中存在一个字串能被该NFA接受,则输出整行 ...

  4. Linux egrep命令

    Linux egrep命令用于在文件内查找指定的字符串. egrep执行效果与"grep-E"相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法. e ...

  5. Linux命令:grep命令 | egrep命令

    grep:文本搜素工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能被模式所匹配到的行 包含三个命令:grep.egrep(相当于grep -E 扩展的正则表达式)和fgrep(相当于grep ...

  6. Linux中grep和egrep命令详解

    rep / egrep 语法: grep  [-cinvABC]  'word'  filename -c :打印符合要求的行数-i :忽略大小写-n :在输出符合要求的行的同时连同行号一起输出-v ...

  7. linux之egrep命令

    1.介绍 egrep工具是grep工具的扩展,相当于grep -E 2.用法 查找1个或1个以上前面的字符为例 查找0个或1个前面字符 egrep 'o?' 1.txt 匹配roo或者body egr ...

  8. grep与egrep命令

    greo -E 等同于 egrep grep常用两种方式 1.   grep -c python a.txt 2.   cat a.txt | grep -c python a.txt文件如下 i l ...

  9. grep egrep fgrep命令

    一.grep.egrep.fgrep命令 本文中主要介绍了linux系统下grep egrep fgrep命令和正则表达式的基本参数和使用格式.方法.(注释:文中fg代表例子,) 1.1.基本定义: ...

  10. Shell命令-文件及内容处理之grep(egrep)、join

    文件及内容处理 - grep(egrep).join 1. grep(egrep):文本过滤工具 grep(egrep)命令的功能说明 grep命令是Linux系统中最重要的命令之一,其功能是从文本文 ...

随机推荐

  1. 一个轻量快速的C++日志库

    limlog 作一篇文章记录实现,驱动优化迭代. 代码仓库 用法 实现 后端实现 前端实现 日期时间的处理 线程id的获取 日志行的其他项处理 优化 整形字符串格式化优化 测试 benchmark 性 ...

  2. [转帖]shell 把以空格分隔的变量 分割后的每个字段赋值给变量

    比如我有一个变量 "123 456 789",要求以空格为分隔符把这个变量分隔,并把分隔后的字段分别赋值给变量,即a=123:b=456:c=789 共有3中方法: 法一:先定义一 ...

  3. [转帖]Sosreport:收集系统日志和诊断信息的工具

    https://zhuanlan.zhihu.com/p/39259107 如果你是 RHEL 管理员,你可能肯定听说过 Sosreport :一个可扩展.可移植的支持数据收集工具.它是一个从类 Un ...

  4. [转帖]02-rsync备份方式

    https://developer.aliyun.com/article/885789?spm=a2c6h.24874632.expert-profile.283.7c46cfe9h5DxWK 简介: ...

  5. [转帖]shell删除文件前几行或后几行

    https://www.cnblogs.com/1394htw/p/14852207.html shell删除文件前几行或后几行 #!/bin/bash #删除前两行 sed -i '1,2d' fi ...

  6. echarts设置单位的偏移

    echarts 可以设置的echarts单位的偏移位置吗? 之前是知道echarts的X和Y是可以设置单位的. 但是设置单位的位置一直不好调整. 现在有时间,我们会回答一下上面标题的问题? echar ...

  7. Docker系列教程01--简介

    Docker 入门教程   作者: 阮一峰 日期: 2018年2月 9日 2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业. 但是,许多人并不清楚 Docker 到底是什么, ...

  8. Django笔记四十二之model使用validator验证器

    本文首发于公众号:Hunter后端 原文链接:Django笔记四十二之model使用validator验证器 这一篇笔记介绍一下 model 里的 validator 验证器. 首先,这是个什么东西呢 ...

  9. 强化学习基础篇[3]:DQN、Actor-Critic详细讲解

    强化学习基础篇[3]:DQN.Actor-Critic详细讲解 1.DQN详解 1.1 DQN网络概述及其创新点 在之前的内容中,我们讲解了Q-learning和Sarsa算法.在这两个算法中,需要用 ...

  10. 8.6 C++ 泛型化编程态

    C/C++语言是一种通用的编程语言,具有高效.灵活和可移植等特点.C语言主要用于系统编程,如操作系统.编译器.数据库等:C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统.图形用户界面 ...