grep、pgrep、egrep、fgrep 之间有什么区别?

grep、pgrep、egrep、fgrep 之间有什么区别?

我想了解grep、、pgrep和之间的区别egrep以及fgrep如何使用它们。

答案1

grep、pgrep、egrep 和 fgrep 之间的区别(Linux):

grep

grep 是“全局正则表达式打印”的首字母缩写。grep 是一个逐行扫描指定文件或文件并返回包含模式的行的程序。模式是一种表达式,它通过将字符解释为元字符来指定一组字符串。例如,星号元字符 (*) 被解释为“零个或多个前导元素”。这使用户可以在 grep 命令中输入一串简短的字符和元字符,让计算机向我们显示哪些文件中的哪些行匹配。

标准 grep 命令如下:

grep <flags> '<regular expression>' <filename>

grep 将搜索结果打印到屏幕(stdout)并返回以下退出值:

0    A match was found.
1    No match was found.
>1   A syntax error was found or a file was inaccessible 
     (even if matches were found).

一些常见的标志是:-c计算成功匹配的次数而不打印实际的匹配项、-i使搜索不区分大小写、-n在每次匹配打印输出之前打印行号、-v取正则表达式的补码(即返回不匹配的行)以及-l打印包含与表达式匹配的行的文件的文件名。

egrep

egrep 是“扩展全局正则表达式打印”的首字母缩写词。

egrep 中的“E”表示将模式视为正则表达式。egrep 中启用了“扩展正则表达式”缩写为“ERE”。egrep(与 相同grep -E)将+?|()视为元字符。

在基本正则表达式(使用 grep)中,元字符?+{|()会失去其特殊含义。如果希望 grep 将这些字符视为元字符,请对 \?\+\{\|\(和进行转义\)

例如,这里 grep 使用基本正则表达式,其中加号按字面意思处理,任何带有加号的行都会返回。

grep "+" myfile.txt

另一方面,egrep 将“+”视为元字符并返回每一行,因为加号被解释为“一次或多次”。

egrep "+" myfile.txt

这里每一行都会返回,因为+egrep 将 视为元字符。普通 grep 只会搜索带有文字 的行+

命令行工具

fgrep 是“固定字符串全局正则表达式打印”的首字母缩写词。

fgrep(与 grep -F 相同)是固定或快速 grep,其行为与 grep 相同,但不会将任何正则表达式元字符识别为特殊字符。由于它仅处理简单字符串而不是复杂模式,因此搜索将更快完成。

例如,如果我想在 .bash_profile 中搜索文字点 (.),那么使用 grep 会很困难,因为我必须转义点,因为点是一个元字符,意思是“通配符,任何单个字符”:

grep "." myfile.txt

上述命令返回 myfile.txt 的每一行。请改用以下命令:

fgrep "." myfile.txt

然后只返回包含文字“。”的行。fgrep 帮助我们不必费心转义元字符。

程序包

pgrep 是“Process-ID Global Regular Expressions Print”的首字母缩写词。

pgrep 查看当前正在运行的进程,并将符合选择条件的进程 ID 列到 stdout。当您只想知道进程的进程 ID 整数时,pgrep 非常方便。例如,如果我只想知道我的 mysql 进程的进程 ID,我会使用pgrep mysql返回进程 ID(如 7312)的命令。

相关内容