带有通配符的grep



我想在文件中为以下字符串进行grep:

directory1
directory2
directory3

有没有办法用grep同时对所有3个进行grep?

例如:

cat file.txt | grep directory[1-3]

不幸的是,上面的不起作用

如果这些是您需要搜索的唯一字符串,请使用-F(grep表示固定字符串):

grep -F "directory1
directory2
directory3" file.txt

如果您想使用更高级的regex进行grep,请使用-E(使用扩展的regex):

grep -E 'directory[1-3]' file.txt

请注意,一些grep(如GNUgrep)不需要-E就可以在本例中工作。

最后,请注意,您需要引用正则表达式。如果您不这样做,您的shell可能会首先根据路径名扩展来扩展regex(例如,如果您在当前目录中有一个名为"directory1"的文件/目录,则您的shell会将grep directory[1-3]转换为grep directory1)。

您在哪个shell下进行了测试?

此处

grep directory[1-3]适用于bash,不适用于zsh

你可以报"directory[1-3]"

或逃离grep directory[1-3]

bash v4.2
zsh v5.0.2
grep (GNUgrep 2.14)

它不是很漂亮,但你可以将grep链接在一起:

grep -l "directory1" ./*.txt|xargs grep -l "directory2"|xargs grep -l "directory3"

限制您的输入以提高性能,例如使用find:

find ./*.txt -type f |xargs grep -l "directory1"|xargs grep -l "directory2"|xargs grep -l "directory3"

相关内容

  • 没有找到相关文章

最新更新