--line-regexp选项,包含空数据

时间:2015-07-17 01:19:55

标签: bash null grep newline

考虑这个命令:

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匹配 新队。但它没有,它就像第一个命令一样成功,为什么呢 此?

1 个答案:

答案 0 :(得分:2)

此行为was introduced与Grep 2.21:

  

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

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

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

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