私は今朝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