gpt4 book ai didi

regex - 在 grep 命令中使用 + 时,为什么需要转义?

转载 作者:行者123 更新时间:2023-11-29 09:37:33 25 4
gpt4 key购买 nike

我想在如下所示的文本文件中查找以多个“=”符号开头的行。

Line one
And this is Line two
=======text in line three
Line four
=======text in line five
Line six

但是当我使用命令时:

grep '^=+'

它什么都不输出。但是如果像这样使用:

grep '^=\+'

我可以获得预期的输出。我的问题是,当我们不想转义 * 符号时,为什么我们需要转义 + 符号?。这意味着我可以发出以下命令并获得输出。

grep '^=*'

*+ 符号有什么区别? + 是否被视为 grep 命令中的特殊字符?

最佳答案

默认情况下,grep 将模式解析为 BRE (Basic Regular Expressions) POSIX表达。这意味着,\+ 被解析为匹配 1 次或多次重复的量词,而 + 被解析为文字 + 符号。在ERE POSIX中,反之亦然,+是一个量词,\+是一个字面量的+符号。要使用 ERE POSIX 语法,请使用 grep -E 'pattern'

所以,它们是相等的:

grep 'a\+'   # Finds 'aaaaa'
grep -E 'a+' # Finds 'aaaaa'

grep 'a+' # Finds 'a+'
gre -E 'a\+' # Finds 'a+'

请注意,\+ 并不总是适用于不同的 grep 实现,通常的解决方法是使用 * 重复模式,即 a\+ => aa*.

* 是匹配 BRE 和 ERE (Extended Regular Expressions) POSIX 中 0 次或多次重复的量词, 如果转义,匹配文字 * 符号。

关于regex - 在 grep 命令中使用 + 时,为什么需要转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46579350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com