--line-regexp 选项与空数据

--line-regexp option with null data

考虑这个命令:

printf 'alpha\nbravo\ncharlie\n' | grep --line-regexp --quiet bravo

grep 看到由换行符分隔的 3 行,并匹配 bravo 行。现在考虑 这个命令:

printf 'alpha[=11=]bravo[=11=]charlie[=11=]' | grep --line-regexp --quiet bravo

我的思路告诉我,因为没用过--null-data,grep应该可以看到 1 甚至 0 行由换行符分隔,并且无法匹配 bravo 后跟 新队。然而它没有,它像第一个命令一样成功,为什么 这个?

此行为 was introduced 与 Grep 2.21:

When searching binary data, grep now may treat non-text bytes as line terminators. This can boost performance significantly.

所以现在发生的是二进制数据,所有非文本字节 (包括换行符)被视为行终止符。如果你想改变这个 行为,您可以:

  • 使用--text。这将确保只有换行符是行终止符

  • 使用--null-data。这将确保只有空字节是行终止符