从文件中读取 grep 模式

Sti*_*ham 73 grep

我有几个大文本文件,在文件中UNIQS.txt我有一个grep来自另一个文件的字符串列表。我使用的代码是

grep -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
Run Code Online (Sandbox Code Playgroud)

什么都不做 - 生成的文件是空的。但是当我这样做时

grep -F -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
Run Code Online (Sandbox Code Playgroud)

它工作正常。这让我感到困惑,因为我认为grep不会将条目解释UNIQS.txt为没有引号和斜杠等的正则表达式模式在文件中(没有)。一般来说,如果您从文件中获取模式,那么它会自动认为它们是正则表达式模式吗?

编辑:UNIQS.txt文件中,有表单的换行符分隔字符串

HWI-ST365:215:D0GH0ACXX:2:1101:10034:186783
Run Code Online (Sandbox Code Playgroud)

(称为模板名称)和文件EEP_VSL...制表符分隔的列,大约有14列,第一列是模板名称,所以基本上我想提取文件中每个模板对应的行。

Gil*_*il' 87

-f选项指定 grep 读取模式的文件。这就像在命令行上传递模式一样(-e如果有多个,则使用该选项),除了当您从 shell 调用时,您可能需要引用该模式以保护其中的特殊字符不被 shell 扩展。

参数-Eor-F-P,如果有的话,告诉 grep 模式是用哪种语法编写的。没有参数,grep 需要基本的正则表达式;with -E, grep 需要扩展的正则表达式;使用-P(如果支持),grep 需要Perl 正则表达式;和-F,grep 需要文字字符串。模式是来自命令行还是来自文件并不重要。

请注意,字符串是子字符串:如果您a+b作为模式传递,a+b+c则匹配包含的行。如果要搜索仅包含所提供字符串之一的行,请传递该-x选项。

  • @sdf 阅读我的最后一段:`-x` (4认同)