Grep

grep -f 在 Windows 中編輯的文件失敗

  • April 5, 2019

我只想分享我今天早上使用 grep -f 從文本文件中獲取要匹配的模式時遇到的問題。

症狀

$ echo 'sandbox/test/script.py' | grep -G '^sandbox/'
sandbox/test/script.py

使用 -f 選項失敗:

$ echo 'sandbox/test/script.py' | grep -G -f patterns.txt
$ cat patterns.txt
^sandbox/

直到我檢查了文本文件,我才明白為什麼 grep 會失敗:

$ file patterns.txt
/home/miguel/patterns.txt: ASCII text, with CRLF line terminators

這個文件被不同的同事在不同的作業系統上使用,有人使用 Windows 行終止符保存了它。

解決方案

使用 dos2unix 解決了這個問題。

$ dos2unix patterns.txt
dos2unix: converting file /home/miguel/patterns.txt to Unix format ...
$ file patterns.txt
/home/miguel/patterns.txt: ASCII text

現在 grep -f 再次工作。

$ echo 'sandbox/test/script.py' | grep -G -f patterns.txt
sandbox/test/script.py

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