使用模式文件和管道中的数据来处理不匹配的模式

时间:2013-03-12 23:14:32

标签: grep cygwin

我有一个ignore.txt文件:

cat ignore.txt
clint

当我这样做时:

pip freeze | grep -v -f ignore.txt

我明白了:

GitPython==0.3.2.RC1  
Markdown==2.2.1  
async==0.6.1  
clint==0.3.1  
gitdb==0.5.4  
legit==0.1.1  
push-to-wordpress==0.1  
python-wordpress-xmlrpc==2.2  
smmap==0.8.2 

但是当我这样做时:

pip freeze | grep -v clint

我确实得到了正确的输出:

GitPython==0.3.2.RC1
Markdown==2.2.1
async==0.6.1
gitdb==0.5.4
legit==0.1.1
push-to-wordpress==0.1
python-wordpress-xmlrpc==2.2
smmap==0.8.2

如何使用grep和命令行工具实现这一目标?

Clarfication Edit:我使用带有cygwin的windows,所以我相信这是GNU grep 2.6.3(来自grep --version)

1 个答案:

答案 0 :(得分:1)

您的语法看起来正确并适用于我的系统。 您的ignore.txt文件可能存在问题。 特别要检查:

  • 您尝试过滤的单词周围没有前导或尾随空格,标签等(正如肯特上面所建议的那样)
  • 该文件具有Unix行结尾
  • 文件由单个换行符终止

关于后者,Single Unix Specification说:

  

pattern_file 中的模式应由<newline>终止。

这意味着没有终结符或具有不同终结符(例如CR LF)的文件可能会出现意外行为(尽管这可能与系统有关)。