如何使用 grep 搜索正则表达式本身,而不对其进行解析

如何使用 grep 搜索正则表达式本身,而不对其进行解析
grep . filename.txt 

这只会返回 filename.txt 中的所有内容,因为 . 是一个代表任何字符的正则表达式。如何使用 grep 搜索句点或其他正则表达式,例如 *?

答案1

grep默认使用正则表达式,grep除非使用开关,否则给出的任何模式都被视为正则表达式-F

*?属于POSIX 正则表达式语言是grep默认使用的。您可以通过指定不同的正则表达式语言(例如 Perl)来使用此类构造:

$ cat a.txt
aaaaaaaa
aabbccaaaacccccccccb
bbbbbb
$ grep -oP 'a.*?b' a.txt
aab
aaaacccccccccb

要搜索至少包含一个句点的行,请使用

$ grep '\.*' foo.txt

对于仅包含句点(或不包含任何内容,这也会匹配空行)的行,使用

$ grep '^\.*$' foo.txt

对于更复杂的正则表达式,请使用-F

$ grep -F '[a-z]*.*[AHG].*' foo.txt
[a-z]*.*[AHG].*

答案2

使用fgrep 或者grep -F相反,如果您想搜索文字,而不是正则表达式。

如果您仅仅想关闭其中一个正则表达式字符的特殊含义grep,只需使用反斜杠将其转义即可,请注意,如果您在命令行中键入此内容,则可能需要“转义转义”,因为您的 shell 可能会在将它们传递给子程序之前剥离其中的一层。

答案3

grep -F不会扩展正则表达式。man grep:

-F, --fixed-strings 将 PATTERN 解释为固定字符串列表,以换行符分隔,其中任何一个都可以匹配。

请注意F不要f

相关内容