Eri*_*ski 60 linux grep command-line
我想通过对之间的差异散步grep,pgrep,egrep,以及fgrep和我将如何使用它们。
Eri*_*ski 90
grep 是一个首字母缩写词,代表“全局正则表达式打印”。grep 是一个程序,它逐行扫描一个或多个指定的文件,返回包含模式的行。模式是通过将字符解释为元字符来指定一组字符串的表达式。例如,星号元字符 (*) 被解释为表示“零个或多个前面的元素”。这使用户能够在 grep 命令中键入一系列简短的字符和元字符,让计算机向我们显示哪些文件匹配的行。
标准的 grep 命令如下所示:
grep <flags> '<regular expression>' <filename>
Run Code Online (Sandbox Code Playgroud)
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).
Run Code Online (Sandbox Code Playgroud)
一些常见的标志是:-c用于计算成功匹配的数量而不打印实际匹配,-i使搜索不区分大小写,-n在每次匹配打印输出之前打印行号,-v取正则表达式的补码(即返回行不匹配),并-l打印具有与表达式匹配的行的文件的文件名。
egrep 是一个首字母缩写词,代表“扩展全局正则表达式打印”。
egrep 中的“E”表示将模式视为正则表达式。在 egrep 中启用了缩写为“ERE”的“扩展正则表达式”。egrep的(其是相同的grep -E)治疗+,?,|,(,和)作为元字符。
在基本的正则表达式(使用 grep)中,元字符?, +, {, |, (, 和)失去了它们的特殊含义。如果您希望 grep 将这些字符视为元字符,请转义它们 \?, \+, \{, \|, \(, 和\)。
例如,这里的 grep 使用基本的正则表达式,其中加号按字面处理,返回任何带有加号的行。
grep "+" myfile.txt
Run Code Online (Sandbox Code Playgroud)
另一方面,egrep 将“+”视为元字符并返回每一行,因为加号被解释为“一次或多次”。
egrep "+" myfile.txt
Run Code Online (Sandbox Code Playgroud)
此处返回每一行,因为+egrep 将其视为元字符。正常的 grep 只会搜索带有文字的行+。
fgrep 是首字母缩写词,代表“固定字符串全局正则表达式打印”。
fgrep(与 grep -F 相同)是固定的或快速的 grep,其行为与 grep 相同,但不识别任何特殊的正则表达式元字符。搜索将完成得更快,因为它只处理简单的字符串而不是复杂的模式。
例如,如果我想在我的 .bash_profile 中搜索文字点 (.),那么使用 grep 会很困难,因为我必须转义点,因为点是元字符,表示“通配符,任何单个字符”:
grep "." myfile.txt
Run Code Online (Sandbox Code Playgroud)
上面的命令返回 myfile.txt 的每一行。改为这样做:
fgrep "." myfile.txt
Run Code Online (Sandbox Code Playgroud)
然后只有具有文字 '.' 的行 在他们返回。fgrep 帮助我们不必费心转义我们的元字符。
pgrep 是首字母缩写词,代表“进程 ID 全局正则表达式打印”。
pgrep 查看当前运行的进程并列出与标准输出匹配的选择标准的进程 ID。当您只想知道进程的进程 ID 整数时,pgrep 很方便。例如,如果我只想知道我的 mysql 进程的进程 ID,我将使用pgrep mysql返回一个进程 ID(如 7312)的命令。