Grep
grep -f 在 Windows 中編輯的文件失敗
我只想分享我今天早上使用 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