Grep
萬用字元的 grep 結果顯示為空白行,文件以 CRLF 結尾
為了只顯示我希望找到的術語(例如,
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
)來繞過別名定義。