的一部分grep --help
是:
-E, --extended-regexp PATTERNS are extended regular expressions
-F, --fixed-strings PATTERNS are strings
网上有很多例子,-E
但我找不到-F
我对正则表达式不是很好,如果可能的话,尽量避免它,所以这-F
看起来是一个更好的选择。
grep 的语法是什么,看看它是否包含 3 个不同的字符串?
的一部分grep --help
是:
-E, --extended-regexp PATTERNS are extended regular expressions
-F, --fixed-strings PATTERNS are strings
网上有很多例子,-E
但我找不到-F
我对正则表达式不是很好,如果可能的话,尽量避免它,所以这-F
看起来是一个更好的选择。
grep 的语法是什么,看看它是否包含 3 个不同的字符串?
如您所述,
-F
选项 or--fixed-string
禁用正则表达式引擎并搜索文字字符串。寻找有效的正则表达式的字符串很有用,但它们本身具有不同的含义。例如:该
[warn]
模式是有效的基本正则表达式 (BRE
),因此如果没有该-F
选项,将搜索并捕获任何包含、、或grep
中至少一个的行。(注意括号在 shell 中也是特殊的,所以我们需要在命令行中引用它们。)w
a
r
n
举个例子,假设我们想从如下的日志文件中找到错误消息,其中包含如下行(因此,带有
[err]
标记的行):Using将匹配两行,因为“t err ace”
grep 'err'
这个词有一个命中。也将匹配两行,因为两者都有一个“e”(和一个“r”)。但在这里,将是一种将匹配限制为仅标签的简单方法。(或者,可以使用默认的正则表达式匹配并转义括号:,或什至。但这更难看。)grep '[err]'
grep -F '[err]'
grep -e '\[err\]'
grep -e '[[]err[]]'
grep '[[]err]'
如果您有更多模式要搜索,您可以
-e
多次使用该选项:匹配任何模式(至少一个)的行将被匹配。
,选项在这种情况下也很有用,因为它意味着如果整行与模式匹配,它只会将一行视为匹配
-x
。--line-regex
例如,如果一行是,grep -x foo
则匹配,foo
但如果该行是,则不匹配foobar
。并且-Fx
一起只会找到完全匹配的行,无论它们包含什么特殊字符。要获取
test.txt
至少包含一个字符串hello
或的行goodbye
,您可以使用:也就是说,要查找的模式作为
-e
选项的参数给出,并且-F
选项告诉将它们视为固定字符串。好吧,这与上述无关,但例如,像这样的模式a.*b
会寻找a
、点、星号和 ab
,而不是正则表达式解释,它会是a
以及b
介于两者之间的任何东西。或者,您可以将查找的字符串放在一个文件中,每行一个,并使用
-f
选项提供文件名:(请注意,执行“所有给定字符串”测试会更加困难。即使使用正则表达式也相当尴尬。)