为什么grep会根据输入文件大小向我显示不同的输出?

时间:2015-11-01 17:50:21

标签: regex bash unix grep

我对grep命令的输出感到有点困惑,它似乎是根据-f FILE的大小截断结果。例如,考虑一个1000行的字符串文件patterns.txt,例如:

adkgjwofjdjglkadjglkjasdfahdg
dsklfjsldkfjaghwioeghsdlkjfld
sdkljfsdkljghsdlfhkwhfklshdfo
...
sdklfjsdklfjsdklfjslkjghdfkjj

和1Gb queryfile.txt来搜索我的模式。我跑的时候

grep -F -o -f patterns.txt queryfile.txt | grep -c adkgjwofjdjglkadjglkjasdfahdg

在这种情况下,即使adkgjwofjdjglkadjglkjasdfahdg中有35次出现,该命令也会报告patterns.txt的第1行(queryfile.txt)的0个匹配项。我通过将patterns.txt文件减少到前10行来验证这一点。重新运行

grep -F -o -f patterns_reduced-list.txt queryfile.txt | grep -c adkgjwofjdjglkadjglkjasdfahdg

正确报告adkgjwofjdjglkadjglkjasdfahdg的35次出现。

发生了什么事?

1 个答案:

答案 0 :(得分:3)

除非...... 模式重叠,否则不会发生这种情况。

检查此示例:

echo "xyxx" | grep -o -F yx$'\n'xy   # output: xy

这会找到第二种模式(xy),因此它找不到第一种模式(yx)。

echo "xyxx" | grep -o -F yx          # output: yx