Grep for literal strings

我想要一个 grep 类型的工具来搜索纯文字字符串。我正在寻找一个日志文件的一行的出现,作为一个单独的日志文件中的一行的一部分。搜索文本可以包含所有类型的正则表达式特殊字符,例如 []().*^$-\

有没有 Unix 搜索工具不使用正则表达式,而只是搜索字符串的文字出现?

60555 次浏览

-F传给 grep

您可以使用 grep 来实现这一点,使用-F 选项。

-F, --fixed-strings       PATTERN is a set of newline-separated fixed strings

这是 fgrepgrep -F,它们不会执行正则表达式。fgrepgrep -F完全相同,但我更喜欢不用担心参数,因为我天生懒惰: -)

grep   ->  grep
fgrep  ->  grep -F  (fixed)
egrep  ->  grep -E  (extended)
rgrep  ->  grep -r  (recursive, on platforms that support it).

你也可以使用 awk,因为它有能力找到固定的字符串,以及编程能力,例如只

awk '{for(i=1;i<=NF;i++) if($i == "mystring") {print "do data manipulation here"} }' file
cat list.txt
one:hello:world
two:2:nothello


three:3:kudos


grep --color=always -F"hello


three" list.txt

输出

one:hello:world
three:3:kudos

我非常喜欢 GNUgrep 中的 -P标志,它可以选择性地忽略特殊字符。

它使 grep -P "^some_prefix\Q[literal]\E$"成为可能

Grep 手册

- P-perl-regexp 将 I 解释为兼容 Perl 的常规 此选项在以下情况下是实验性的 combined with the -z (--null-data) option, and grep -P may 未实现特性的警告。