4

我想 grep 文件中的以下字符串:

directory1
directory2
directory3

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

例如:

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

不幸的是,以上不起作用

4

3 回答 3

9

如果这些是您需要搜索的唯一字符串,请使用-F(grep for fixed strings):

grep -F "directory1
directory2
directory3" file.txt

如果您想使用更高级的正则表达式进行 grep,请使用-E(使用扩展的正则表达式):

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

请注意,某些greps(如 GNU grep)不需要-E此示例即可工作。

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

于 2013-02-09T01:18:35.807 回答
1

你在哪个shell下测试过?

这里

grep directory[1-3] works for bash, doesn't work under zsh

you can either quote "directory[1-3]"

or escape grep directory\[1-3\]

bash v4.2
zsh v5.0.2
grep (GNUgrep 2.14)
于 2013-02-09T01:53:22.197 回答
0

It's not very pretty but you can chain the grep together:

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

Limit your input so to improve performance, for example use find:

find ./*.txt -type f |xargs grep -l "directory1"|xargs grep -l "directory2"|xargs grep -l "directory3"
于 2015-02-01T19:52:50.830 回答