通配符的 grep 结果显示为空行,文件以 CRLF 结尾

通配符的 grep 结果显示为空行,文件以 CRLF 结尾

为了仅显示我希望查找的术语(例如,temperature)和紧邻的文本,我正在调用grep ".\{0,5\}temperature.\{0,5\}" *

当文件具有 Unix 行尾时,此命令可以正常工作。但是,当搜索在 Windows 中创建的文件(以 CRLF 结尾)时,只要 CRLF 在 5 个字符范围内,整行就会显示为空白,而不是 grep 显示正确的结果。

我尝试过-U(二进制)标志但无济于事。

这是我用来测试的文件。我有一个以 CRLF 结尾保存的版本 (test_dos.txt),另一个仅以 LF (test_unix.txt) 保存:

the body temperature is the variable
temperature12345678
temperature1234567
temperature123456
temperature12345
temperature1234
temperature123
temperature12
temperature1
temperature

woie temperature!! tempe oaj

调用的结果grep -o ".\{0,5\}temperature.\{0,5\}" *是:

test_dos.txt:body temperature is t
test_dos.txt:temperature12345
test_dos.txt:temperature12345
test_dos.txt:temperature12345
test_dos.txt:temperature12345





test_dos.txt:woie temperature!! te
test_unix.txt:body temperature is t
test_unix.txt:temperature12345
test_unix.txt:temperature12345
test_unix.txt:temperature12345
test_unix.txt:temperature12345
test_unix.txt:temperature1234
test_unix.txt:temperature123
test_unix.txt:temperature12
test_unix.txt:temperature1
test_unix.txt:temperature
test_unix.txt:woie temperature!! te

我该怎么做才能让 grep 使用 Windows/DOS 文件显示正确的结果?

答案1

确保您没有grep指定其他选项的别名。从实验上看, --colorGNU 的选项似乎grep在某种程度上干扰了 DOS 格式文件中 CR 的处理,这导致了某些情况下所描述的输出。您可以通过在命令前添加前缀\(例如\grep)或指定可执行文件的完整路径(例如/bin/grep)来绕过别名定义。

相关内容