![如何使用 grep 搜索正则表达式本身,而不对其进行解析](https://linux22.com/image/1364924/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20grep%20%E6%90%9C%E7%B4%A2%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%9C%AC%E8%BA%AB%EF%BC%8C%E8%80%8C%E4%B8%8D%E5%AF%B9%E5%85%B6%E8%BF%9B%E8%A1%8C%E8%A7%A3%E6%9E%90.png)
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
!