当前位置: 首页>>技术教程>>正文


grep egrep fgrep rgrep

, ,

名称

grep,egrep,fgrep,rgrep [手册页]-打印与图案匹配的线

概要

grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]

例子

grep

首先要开始此linux grep命令行教程,我们需要创建一个示例文件以供使用,请运行以下命令:

echo -e "Redhatlinux\nDebianLInux4.0\nPCLinuxOS\n 
OpenSUSE\nLinUxFEDORA\n\nMandriva" > file.grep_1
echo -e "MintLinux\nLinuxGYM1.0.3\nUbuntu\n
Kubuntu\nSlaxLiNuX\n\nKnoppix" > file.grep_2

您已经假设grep可用于搜索文件中的字符串。让我们搜索单词”linux”:

grep linux * 

grep can be used to search string within a file

由于Linux grep中的所有其他内容也区分大小写,因此要忽略大小写,我们需要将grep与-i选项结合使用:

grep -i linux * 

grep ignore case sensitivity

grep选项-h允许我们禁止显示文件名,并使用-n选项grep为文件中的行编号。 –colour =自动高亮显示匹配项:

grep -inh --colour=auto linux * 

grep suppress display file name and display line numbers




如果我们不希望grep输出不包含带有关键字linux的行的输出行,则使用-v(invert)选项:

grep -iv linux * 

grep with invert option

使用-c时,grep可以计算文件中字符串出现的次数,因此grep将显示关键字linux在两个文件中均未出现的次数:

grep -icv linux * 

use grep to count pattern occurrences within files

如果我们正在寻找包含关键字”Ubuntu”的文件的名称,我们将使用grep的-l选项:

grep -l Ubuntu * 

use grep to search for pattern in the file names

带-x选项的Grep将仅打印精确的出现次数。

grep -ixc linux * 

Grep with -x option will print exact occurrences only

Grep甚至可以使用包含匹配模式的文件:

echo "LinUx" > grep_pattern.txt
grep -f grep_pattern.txt *

grep can use a pattern template from a file

搜索日志文件时,系统管理员一定会喜欢以下grep选项。 -B3(匹配前显示3行)和-A3(匹配后显示3行)。为了使其更具可读性,可以使用–colour = auto:

grep -B3 -A3 --colour=auto "command" /var/log/dmesg 

Display lines before and after pattern match

Grep&正则表达式

Grep和正则表达式(regex)。这个主题肯定可以涵盖整本书,但是如果至少不显示grep和正则表达式的几个示例,那将是可耻的。例如,要使grep只返回包含数字的行,我们使用以下命令:

grep [0-9] * 

use grep to search lines which contain digits

要使用grep计数文件中的所有空行,我们使用以下命令:

grep -ch ^$ file.grep_2 

Grep can count empty lines within a file

让我们看看哪一行以”L”开头并以数字结尾(^->匹配该行的开头,$->匹配该行的结尾):



grep ^L.*[0-9]$  * 

use grep to match a pattern at the beginning of the line

为了使grep只匹配”b”是单词中第三个字符的行,我们可以使用以下命令linux命令

grep ..b  * 

match third character in the string

egrep

egrep是grep的扩展版本,或者egrep等于grep -E。 Egrep支持更多的正则表达式模式。让我们搜索正好包含两个连续的p字符的行:

egrep p{2} *
OR
grep pp *
OR
grep -E p{2} *

Match line with two consecutive p characters

让我们获取egrep命令的输出,该输出的所有行均以”S”或”A”结尾:

egrep "S$|A$" * 

grep or function to match pattern at the end of the line

fgrep

fgrep是grep的更快版本,它不支持正则表达式,因此被认为是更快的。 fgrep等于grep -F。 fgrep不解释正则表达式(regex)的简单证明:

fgrep linux$ *
egrep linux$ *
grep linux$ *

fgrep does not interpret regular expressions

rgrep

rgrep是grep的递归版本。在这种情况下,递归意味着rgrep在为指定模式抓取时可以递归通过目录。 rgrep与grep -r类似。

mkdir -p dir/dir1
echo "Linux_rgrep" > dir/dir1/rgrep.txt
grep rgrep *
rgrep rgrep *
grep -r rgrep *

rgrep is recursive version of grep

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10506.html,未经允许,请勿转载。