--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
。这将确保只有空字节是行终止符
考虑这个命令:
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
。这将确保只有空字节是行终止符