10445:ndmp 10000/tcp # Network Data Management Protocol
10446:ndmp 10000/udp # Network Data Management Protocol
Count函数匹配
若要将匹配行数打印到标准输出,请使用-c(或 --count)选项。
在下面的示例中,我们将计算以/usr/bin/zsh作为shell的帐户数量。
$regular expression$grep -c '/usr/bin/zsh' /etc/passwd
输出
4
安静模式
-q(或--quiet)告诉grep在安静模式下运行,不要在标准输出上显示任何内容。 如果找到匹配项,则该命令以状态0退出。这在要检查文件是否包含字符串并根据结果执行某些操作的shell脚本中使用grep时非常有用。
这是一个在安静模式下使用grep作为if语句中的测试命令的示例:
if grep -q PATTERN filename
then
echo pattern found
else
echo pattern not found
fi
Basic正则表达式
GNU Grep具有三个正则表达式功能集,Basic、 Extended 和 perl 兼容
默认情况下,grep将模式解释为基本的正则表达式,其中除元字符之外的所有字符实际上都是与自己匹配的正则表达式。
以下是最常用的元字符的列表:
使用^(插入符号)符号可在行首匹配表达式。 在下面的示例中,仅当字符串kangaroo出现在行的开头时才匹配。
$grep "^kangaroo" file.txt
使用$(美元)符号来匹配行尾的表达式。 在下面的示例中,仅当字符串kangaroo出现在行的最后时才匹配。
$grep "kangaroo$" file.txt
使用.(点)符号以匹配任何单个字符。 例如,要匹配以kan开头,然后有两个字符并以字符串roo结尾的任何内容,可以使用以下模式:
$grep "kan..roo" file.txt
使用[](括号)来匹配括号中包含的任何单个字符。 例如,找到包含accept或“ accent”的行,可以使用以下模式:
$grep "acce[np]t" file.txt
使用[^]来匹配不在括号内的任何单个字符。下面的模式将匹配任何包含co(any_letter_except_l)a的字符串组合,如coca、cobalt等,但不匹配包含cola的行,
$grep "co[^l]a" file.txt
要转义下一个字符的特殊含义,请使用\(反斜杠)符号。
Extended正则表达式
要将模式解释为扩展的正则表达式,请使用-E(或--extended-regexp)选项。 扩展的正则表达式包括所有基本元字符,以及用于创建更复杂和更强大的搜索模式的其他元字符。 以下是一些示例:
匹配并提取给定文件中的所有电子邮件地址:
$grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
匹配并提取给定文件中的所有有效IP地址:
$grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' file.txt
-o选项仅用于打印匹配的字符串。
搜索多个字符串(模式)
可以使用OR运算符|将两个或多个搜索模式结合在一起。
默认情况下,grep将模式解释为基本正则表达式,其中的元字符(例如|) 失去其特殊含义,必须使用反斜杠版本。
在以下示例中,我们正在Nginx日志错误文件中搜索所有出现的致命,错误和严重的单词:
$grep 'fatal\|error\|critical' /var/log/nginx/error.log
如果使用扩展正则表达式选项-E,则不应转义运算符|,如下所示:
$grep -E 'fatal|error|critical' /var/log/nginx/error.log
在匹配之前打印行
要在匹配行之前打印特定数量的行,请使用-B(或 --before-context)选项。
例如,要在匹配行之前显示5行前奏上下文,可以使用以下命令:
$grep -B 5 root /etc/passwd
匹配后打印行
若要在匹配行之后打印特定数量的行,请使用-A(或 --after-context)选项。
例如,要在匹配行之后显示尾随上下文的五行,可以使用以下命令:
$grep -A 5 root /etc/passwd
总结
grep命令允许您在文件内部搜索模式。 如果找到匹配项,则grep打印包含指定模式的行。
在Grep用户手册页上,还有更多有关Grep的知识。
如果您有任何问题或反馈,请随时发表评论。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx