如何 grep 查找包含多个连续破折号的字符串?

How can I grep for a string that contains multiple consecutive dashes?

我想 grep 包含破折号的字符串,如下所示:

---0 [58ms, 100%, 100%] 

至少有一个破折号。

我发现了这个问题:How can I grep for a string that begins with a dash/hyphen?

所以我想使用:

grep -- -+ test.txt

但我一无所获

最后,我的同事告诉我这行得通:

grep '\-\+' test.txt

是的,它有效。但是我和他查了很多资料都不知道为什么。

这也有效:

grep -- -* test.txt

-+ 你说的是:多个 -。但这不会被 grep 自动理解。你需要告诉它 + 有特殊的含义。

您可以使用扩展的正则表达式 -E:

grep -E -- "-+" file

或者转义 +:

grep -- "-\+" file

测试

$ cat a
---0 [58ms, 100%, 100%] 
hell
$ grep -E -- "-+" a
---0 [58ms, 100%, 100%] 
$ grep -- "-\+" a
---0 [58ms, 100%, 100%] 

来自man grep

REGULAR EXPRESSIONS

Basic vs Extended Regular Expressions

In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \).