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
答案3
grep -F
不会扩展正则表达式。man grep:
-F, --fixed-strings 将 PATTERN 解释为固定字符串列表,以换行符分隔,其中任何一个都可以匹配。
请注意F
不要f
!