用通配符grep

问题描述 投票:3回答:3

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

directory1
directory2
directory3

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

例如:

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

不幸的是,上述方法无效

grep wildcard
3个回答
6
投票

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

grep -F "directory1
directory2
directory3" file.txt

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

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

请注意,某些greps(如GNU grep)不需要-E才能使用此示例。

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


1
投票

你在哪个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)

0
投票

它不是很漂亮,但你可以把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"
© www.soinside.com 2019 - 2024. All rights reserved.