我只是想分享今天早上使用 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