如何 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 \).
我想 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 \).