Answers:
grep是“ Global Regular Expressions Print”的缩写。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中的'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是首字母缩写,代表“进程ID全局正则表达式打印”。
pgrep查看当前正在运行的进程,并列出与选择标准匹配到stdout的进程ID。当您只想知道进程的进程ID整数时,pgrep会很方便。例如,如果我只想知道mysql进程的进程ID,则可以使用该命令pgrep mysql
返回一个进程ID,例如7312。