Grep

萬用字元的 grep 結果顯示為空白行,文件以 CRLF 結尾

  • August 18, 2021

為了只顯示我希望找到的術語(例如,temperature)和緊鄰的文本,我打電話給grep ".\{0,5\}temperature.\{0,5\}" *

當文件具有 Unix 行尾時,此命令可以正常工作。但是,當搜尋在 Windows 中創建的文件(以 CRLF 結尾)時,grep 不會顯示正確的結果,只要 CRLF 在 5 個字元範圍內,整行就會顯示為空白。

我試過-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 文件的正確結果?

確保您沒有grep指定其他選項的別名。--color從實驗上看,GNU的選項似乎grep以某種方式乾擾了它對 DOS 格式文件中 CR 的處理,從而導致在某些情況下描述的輸出。您可以通過在命令前加上前綴\(例如,\grep)或通過指定執行檔的完整路徑(例如,/bin/grep)來繞過別名定義。

引用自:https://unix.stackexchange.com/questions/665228