用通配符grep
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用通配符grep相关的知识,希望对你有一定的参考价值。
我想grep文件中的以下字符串:
directory1
directory2
directory3
有没有办法用grep同时grep所有3?
例如:
cat file.txt | grep directory[1-3]
不幸的是,上述方法无效
答案
如果这些是您需要搜索的唯一字符串,请使用-F
(grep表示固定字符串):
grep -F "directory1
directory2
directory3" file.txt
如果你想使用更高级的正则表达式grep,请使用-E
(使用扩展正则表达式):
grep -E 'directory[1-3]' file.txt
请注意,某些grep
s(如GNU grep)不需要-E
才能使用此示例。
最后,请注意您需要引用正则表达式。如果不这样做,你的shell可能会首先根据路径名扩展扩展正则表达式(例如,如果你在当前目录中有一个名为“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"
以上是关于用通配符grep的主要内容,如果未能解决你的问题,请参考以下文章