Bash --带有空数据的行regexp选项

Bash --带有空数据的行regexp选项,bash,null,grep,newline,Bash,Null,Grep,Newline,考虑以下命令: printf 'alpha\nbravo\ncharlie\n' | grep --line-regexp --quiet bravo printf 'alpha\0bravo\0charlie\0' | grep --line-regexp --quiet bravo grep看到由换行符分隔的3行,并匹配bravo行。现在考虑 此命令: printf 'alpha\nbravo\ncharlie\n' | grep --line-regexp --quiet bravo

考虑以下命令:

printf 'alpha\nbravo\ncharlie\n' | grep --line-regexp --quiet bravo
printf 'alpha\0bravo\0charlie\0' | grep --line-regexp --quiet bravo
grep看到由换行符分隔的3行,并匹配bravo行。现在考虑 此命令:

printf 'alpha\nbravo\ncharlie\n' | grep --line-regexp --quiet bravo
printf 'alpha\0bravo\0charlie\0' | grep --line-regexp --quiet bravo
我的想法告诉我,因为我没有使用
--null数据,所以grep应该看到
用换行符分隔的1行甚至0行,与后跟
新线。但是它没有,它就像第一个命令一样成功,为什么呢
这?

grep2.21的这种行为:

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

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

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

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


这些成功和失败对我来说都是恰如其分的。