如何使用grep自己搜索正则表达式,而不解析它们

MYV*_*MYV 2 linux bash grep command-line

grep . filename.txt 
Run Code Online (Sandbox Code Playgroud)

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

ter*_*don 10

grep默认情况下使用正grep则表达式,除非您使用-Fswitch,否则任何模式都被假定为正则表达式。

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

$ cat a.txt
aaaaaaaa
aabbccaaaacccccccccb
bbbbbb
$ grep -oP 'a.*?b' a.txt
aab
aaaacccccccccb
Run Code Online (Sandbox Code Playgroud)

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

$ grep '\.*' foo.txt
Run Code Online (Sandbox Code Playgroud)

对于仅包含句点的行,请使用

$ grep '^\.*$' foo.txt
Run Code Online (Sandbox Code Playgroud)

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

$ grep -F '[a-z]*.*[AHG].*' foo.txt
[a-z]*.*[AHG].*
Run Code Online (Sandbox Code Playgroud)


Nic*_*ton 5

fgrep如果要搜索文字而不是正则表达式,请改用。

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


Chr*_*ris 5

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

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

请注意F,不要f