我想了解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)的命令。