Windowsで編集されたファイルでgrep -fが失敗する

Windowsで編集されたファイルでgrep -fが失敗する

私は今朝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行の終端を使用して保存しました。

答え1

解決策

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

関連情報