【问题标题】:--line-regexp option with null data--line-regexp 选项与空数据
【发布时间】:2026-02-02 04:10:01
【问题描述】:

考虑这个命令:

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

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

printf 'alpha\0bravo\0charlie\0' | grep --line-regexp --quiet bravo

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

【问题讨论】:

  • 那些成功和失败对我来说都是恰当的。

标签: bash null grep newline


【解决方案1】:

此行为 was introduced 与 Grep 2.21:

在搜索二进制数据时,grep 现在可以将非文本字节视为行 终结者。这可以显着提高性能。

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

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

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

【讨论】: