grep -f 在 Windows 中编辑的文件上失败

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 行终止符保存它。

答案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

相关内容