Grep(Regex)中的正则表达式(2)

量词Quantifier允许您指定要出现的匹配项必须出现的项数。 下表显示了GNU grep支持的量词:

Quantifier描述
*   匹配上一项零次或多次。  
?   匹配上一项零或一次。  
+   将上一项匹配一次或多次。  
{n}   将前一项精确匹配n次。  
{n,}   至少匹配n个项目。  
{,m}   最多匹配m次以上项。  
{n,m}   将前一项匹配n至m次。  

*(星号)字符与前面的项目匹配零次或多次。 以下将匹配“right”,“sright”,“ssright”等等。

$grep 's*right'

下面是更高级的模式,它匹配所有以大写字母开头,以句点或逗号结尾的行。 .* 正则表达式匹配任意数量的任何字符:

$grep -E '^[A-Z].*[.,]$' file.txt

? (问号)字符使前一项为可选,并且只能匹配一次。 以下将同时匹配“bright”和“right”。 ? 字符以反斜杠转义,因为我们使用的是基本正则表达式:

$grep 'b\?right' file.txt

下面是使用扩展正则表达式的同一个正则表达式:

$grep -E 'b?right' file.txt

+(加号)字符与前面的项目匹配一次或多次。 以下将匹配“sright”和“ssright”,但不匹配“right”:

$grep -E 's+right' file.txt

大括号字符{}使您可以指定确切的数字,上限或下限或发生匹配必须发生的范围。

以下内容匹配3到9位之间的所有整数:

$grep -E '[[:digit:]]{3,9}' file.txt

交替Alternation

交替是一个简单的“或”。替换操作符| (pipe)允许您指定不同的可能匹配,可以是文字字符串或表达式集。该操作符在所有正则表达式操作符中优先级最低。

在下面的例子中,我们搜索Nginx日志错误文件中出现的所有单词fatal, error和critical:

$grep 'fatal\|error\|critical' /var/log/nginx/error.log

如果使用扩展正则表达式,则不应转义运算符|,如下所示:

$grep -E 'fatal|error|critical' /var/log/nginx/error.log

分组

分组是正则表达式的一项功能,可让您将模式分组在一起并将其作为一项引用。 使用括号()创建组。

使用基本正则表达式时,必须用反斜杠(\)对括号进行转义。

下面的示例同时匹配“ fearless”和“ less”。 ? 量词使(fear)组成为可选的:

$grep -E '(fear)?less' file.txt

反斜杠特殊表达式

GNU grep包含几个元字符,由反斜杠和常规字符组成。 下表显示了一些最常见的特殊反斜杠表达式:

ExpressionDescription
\b   单词锁定符  
\<   在单词开头匹配一个空字符串。  
\>   在单词末尾匹配一个空字符串。  
\w   匹配一个单词。  
\s   匹配一个空格。  

以下模式将匹配单独的单词“ abject”和“ object”。 如果嵌入较大的单词,则不会匹配这些单词:

$grep '\b[ao]bject\b' file.txt

总结

正则表达式用于文本编辑器,编程语言和命令行工具,例如grep,sed和awk。 在搜索文本文件,编写脚本或过滤命令输出时,了解如何构造正则表达式将非常有帮助。

如果您有任何问题或反馈,请随时发表评论。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f9788d2a8ab6ab273f0d3c5bb834a295.html