egrep 命令详解

| 选择喜欢的代码风格  

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

egrep 命令安装:


-bash: egrep: command not found

#All systems
curl cmd.cat/egrep.sh

#Debian
apt-get install grep

#Ubuntu
apt-get install grep

#Alpine
apk add grep

#Arch Linux
pacman -S grep

#Kali Linux
apt-get install grep

#CentOS
yum install grep

#Fedora
dnf install grep

#OS X
brew install grep

#Raspbian
apt-get install grep

#Docker
docker run cmd.cat/egrep egrep

egrep 命令补充说明:


egrep 命令用于在文件内查找指定的字符串。egrep 执行效果与 grep -E 相似,使用的语法及参数可参照 grep 指令,与 grep 的不同点在于解读字符串的方法。egrep 是用 extended regular expression 语法来解读的,而 grep 则用 basic regular expression 语法解读,extended regular expression 比 basic regular expression 的表达更规范。

egrep 命令语法:


egrep [options] PATTERN [FILE...]

egrep 命令选项:


-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 如果文件的前几个字节表明该文件包含二进制数据,则假定该文件的类型为TYPE。 默认情况下,TYPE是二进制,grep通常输出一行表示二进制文件匹配的消息,或者如果没有匹配则不输出消息。 如果TYPE不匹配,则grep假定二进制文件不匹配; 这相当于-I选项。 如果TYPE是文本,则grep处理二进制文件,就好像它是文本一样; 这相当于-a选项。 警告:grep --binary-files = text可能会输出二进制垃圾,如果输出是终端,并且终端驱动程序将其中的一些解释为命令,则可能会产生令人讨厌的副作用。

--colour[=WHEN], --color[=WHEN] 使用GREP_COLOR环境变量中的标记查找环绕匹配的字符串。 什么时候可能是“never”,“always”或“auto”
-c, --count 抑制正常输出; 而是为每个输入文件打印匹配行的计数。 使用-v, -  inverse-match选项(见下文),计算不匹配的行。
-D ACTION, --devices=ACTION 如果输入文件是设备,FIFO或套接字,请使用ACTION处理它。 默认情况下,读取ACTION,这意味着读取设备就像它们是普通文件一样。 如果跳过ACTION,则会以静默方式跳过设备。 -d ACTION,--directories = ACTION如果输入文件是目录,请使用ACTION处理它。 默认情况下,读取ACTION,这意味着读取目录就像它们是普通文件一样。 如果跳过ACTION,则会以静默方式跳过目录。 如果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 抑制正常输出; 而是打印每个输入文件的名称,通常不会打印输出。 扫描将在第1个匹配中停止。
-l, --files-with-matches  抑制正常输出; 而是打印通常打印输出的每个输入文件的名称。 扫描将在第一个匹配中停止。
-m NUM, --max-count=NUM 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 仅显示与PATTERN匹配的匹配行的部分。
--label=LABEL 显示实际来自标准输入的输入作为来自文件LABEL的输入。 这对zgrep这样的工具特别有用,例如gzip -cd foo.gz | grep -H --label = foo something
--line-buffered 使用行缓冲。 这可能会导致性能下降。
-q, --quiet, --silent 不要写任何标准输出。 如果发现任何匹配,则立即退出零状态,即使检测到错误也是如此。 另请参阅-s或--no-messages选项。
-R, -r, 递归地读取每个目录下的所有文件; 这相当于-d recurse选项。 
--include= PATTERN
仅在搜索匹配PATTERN的文件的目录中递归。
--exclude= PATTERN
Recurse in目录跳过文件匹配PATTERN。

-s, --no-messages 禁止有关不存在或不可读文件的错误消息。 可移植性说明:与GNU grep不同,传统的grep不符合POSIX.2,因为传统的grep缺少-q选项,其-s选项的行为类似于GNU grep的-q选项。 旨在可移植到传统grep的Shell脚本应避免使用-q和-s,而应将输出重定向到 /dev/null。
-U, --binary  将文件视为二进制文件。 默认情况下,在MS-DOS和MS Windows下,grep通过查看从文件读取的第一个32KB的内容来猜测文件类型。 如果grep决定文件是文本文件,它会从原始文件内容中删除CR字符(使正则表达式正确,^和$正常工作)。 指定-U否决了这种猜测,导致所有文件被读取并逐字传递给匹配机制; 如果文件是每行末尾带有CR / LF对的文本文件,则会导致某些正则表达式失败。 此选项对MS-DOS和MS-Windows以外的平台没有影响。

-u, --unix-byte-offsets 报告Unix风格的字节偏移量。 此开关使grep报告字节偏移,就好像该文件是Unix样式的文本文件,即剥离了CR字符。 这将产生与在Unix机器上运行grep相同的结果。 除非也使用-b选项,否则此选项无效; 它对MS-DOS和MS-Windows以外的平台没有影响。
-V, --version 将grep的版本号打印为标准错误。 此版本号应包含在所有错误报告中(见下文)。
-v, --invert-match  反转匹配感,选择不匹配的线条。
-w, --word-regexp 仅选择包含构成整个单词的匹配项的行。 测试是匹配的子字符串必须位于行的开头,或者前面是非单词构成字符。 同样,它必须位于行的末尾或后跟非单词构成字符。 单词构成字符是字母,数字和下划线。
-x, --line-regexp 仅选择与整行完全匹配的匹配项。
-y  -i 过时的同义词。
-Z, --null  输出零字节(ASCII NULL字符),而不是通常跟随文件名的字符。 例如,grep -lZ 在每个文件名后输出一个零字节,而不是通常的换行符。 即使存在包含不常用字符(如换行符)的文件名,此选项也会使输出明确无误。 此选项可与find -print0,perl -0,sort -z和xargs -0等命令一起使用,以处理任意文件名,甚至是包含换行符的文件名。

egrep 命令参数:


文件:待 egrep 的文件。

egrep 扩展阅读:正则表达式 - Regular Expressions


正则表达式是描述一组字符串的模式。 正则表达式的构造类似于算术表达式,通过使用各种运算符来组合较小的表达式。

Grep 理解正则表达式语法的两个不同版本:basicextended。 在 GNU grep 中,使用任一语法的可用功能都没有区别。 在其他实现中,基本正则表达式不太强大。 以下描述适用于在 egrep 中使用的扩展正则表达式; 之后总结了基本正则表达式的差异。

基本构建块是与单个字符匹配的正则表达式。 大多数字符,包括所有字母和数字,都是与自身匹配的正则表达式。 具有特殊含义的任何元字符都可以通过在其前面加上反斜杠来引用

括号表达式是由 [ and ] 括起来的字符列表。 它匹配该列表中的任何单个字符; 如果列表的第一个字符是插入符号 ^ 那么它匹配列表中没有的任何字符。 例如,正则表达式 [0123456789] 匹配任何单个数字。

在括号表达式中,范围表达式由两个用连字符(“ - ”)分隔的字符组成。 它匹配使用区域设置的整理顺序和字符集在两个字符之间进行排序的任何单个字符。 例如,在默认的 C 语言环境中,[a-d] 等同于 [abcd]。 许多语言环境按字典顺序对字符进行排序,在这些语言环境中 [a-d] 通常不等同于 [abcd] ; 例如,它可能等同于 [aBbCcDd]。 要获得括号表达式的传统解释,可以通过将 LC_ALL 环境变量设置为值 C 来使用 C 语言环境。

最后,某些命名的字符类在括号表达式中预定义,如下所示。 他们的名字是自我解释的,他们是[:alnum:][:alpha:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]。 例如,[[:alnum:]] 表示 [0-9A-Za-z],但后一种形式取决于 C 语言环境和 ASCII 字符编码,而前者独立于语言环境和字符集。 (请注意,这些类名中的括号是符号名称的一部分,除了括号列表中的括号外,还必须包含它们)。大多数元字符在列表中失去了特殊含义。 要包含文字,请将其放在列表中的第一位。 同样,要包含一个文字 ^ 将它放在任何地方,但首先。 最后,要包含一个文字 - 将它放在最后。

匹配任何单个字符。 符号 \w[[:alnum:]] 的同义词,\W[^[:alnum]] 的同义词。

插入符号 ^ 和美元符号 $ 是元字符,分别匹配行的开头和结尾处的空字符串。 符号 \<\> 分别匹配单词开头和结尾的空字符串。 符号 \b 匹配单词边缘的空字符串,\B 匹配空字符串,前提是它不在单词的边缘。

正则表达式后面可能跟几个重复运算符之一:

# 说明
? 前面的项是可选的,最多匹配1次。
* 前面的项目将匹配0次或多次。
+ 前面的项目将匹配1次或多次。
{n} 前面的项目恰好匹配n次。
{n,} 前面的项目匹配n次或更多次。
{n,m} 前面的项是可选的,最多匹配一次。

egrep 命令实例


在myfile.txt文件中搜索支持帮助和窗口的模式。

egrep "support|help|windows" myfile.txt

匹配myfile.txt中的任何行,这些行以一个字母单词开头,该单词也结束该行。

egrep '^[a-zA-Z]+$' myfile.txt

计算 myfile.txt 中以 begin 开头或以 end 结尾的行数。

egrep -c '^begin|end$' myfile.txt

egrep 命令扩展阅读:




egrep 命令评论