如何使用grep精确查找字符串(不使用正则表达式)

44

有没有一种方法可以使用无需正则表达式的方式查找确切的字符串,例如如果我想要查找(字面上):

/some/file"that/has'lots\of"invalid"chars/and.triggers$(#2)[*~.old][3].html

我不想逐个转义每一个可转义的字符。本质上,我想像使用echo一样传递它:

$ echo "/some/file\"that/has'lots\of\"invalid\"chars/and.triggers$(#2)[*~.old][3].html"
/some/file"that/has'lots\of"invalid"chars/and.triggers$(#2)[*~.old][3].html
2个回答

70

使用 fgrep,与 grep -F 相同(匹配固定字符串)。


使用 fgrep 'preg_replace("/([a-z]+)([A-Z])/"' . -R 完美运行(而 grep 则失败)。你仍然需要转义 $,但这是可以接受的。 - Nathan J.B.
19
现在似乎更倾向于使用grep -F,“以egrep或者fgrep的方式直接调用已经被弃用了”。fgrep(1) - Linux man page - Lily Finley

19

好的,您可以将要匹配的信息每行放置,并使用 grep 命令:

grep -F -f patterns.txt file.txt

注意使用了标志-F,这使得greppatterns.txt文件中的每一行作为fixed-stringfile.txt中搜索。


1
值得注意的是,这与 fgrep -f patterns.txt file.txt 相同。通过使用模式文件,$ 不需要转义。最终我决定接受其他方案,因为它是最省时的。 - Nathan J.B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接