我想 grep 文件中的以下字符串:
directory1
directory2
directory3
有没有办法用grep同时grep所有3个?
例如:
cat file.txt | grep directory[1-3]
不幸的是,以上不起作用
如果这些是您需要搜索的唯一字符串,请使用-F
(grep for fixed strings):
grep -F "directory1
directory2
directory3" file.txt
如果您想使用更高级的正则表达式进行 grep,请使用-E
(使用扩展的正则表达式):
grep -E 'directory[1-3]' file.txt
请注意,某些grep
s(如 GNU grep)不需要-E
此示例即可工作。
最后,请注意您需要引用正则表达式。如果你不这样做,你的 shell 可能会首先根据路径名扩展来扩展正则表达式(例如,如果你在当前目录中有一个名为“directory1”的文件/目录,grep directory[1-3]
将由grep directory1
你的 shell 转换)。
你在哪个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)
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"