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
。这将确保只有换行符是行终止符
- 使用
--空数据
。这将确保只有空字节是行终止符
这些成功和失败对我来说都是恰如其分的。