GNU grep 检查输入是否包含 LF 字符

Yur*_*uri 3 grep newlines

我测试一组数据文件的内容是否至少包含一组字符中的一个,这些字符由打印和非打印字符组成。

我的最后一个问题是检测文件是否包含换行符。我的GNU grep 3.0声明每个输入都包含一个 LF ......为什么会这样?

echo -n "test" | grep -UF -e $'\x0a'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我怀疑一些隐含的 EOL/EOF 干扰。

Vla*_*eev 10

grep 是面向行的 - 如果输入不以换行符结尾,它仍将最后一个换行符(或文件开头)之后的文本视为一行。

面向行的程序不适合直接处理二进制文件 - 如果二进制文件有特别长的“行”,它们通常会出现病态的情况。

相反,考虑类似的组合trcmp

$ echo -n foo | tr -d -c $'\n' | cmp /dev/null - 
# no output and exits with status 0

$ echo foo | tr -d -c $'\n' | cmp /dev/null -
cmp: EOF on /dev/null which is empty
# exits with status 1
Run Code Online (Sandbox Code Playgroud)

这种方法还有一个优点,就是只需要读取输入到第一个换行符(加上缓冲)。