grep字符串与字母和数字的精确匹配

时间:2019-06-11 07:19:21

标签: grep exact-match

我正在使用grep从文件1中提取与file2中的字符串匹配的行。文件2中的字符串同时包含字母和数字。例如;

MSTRG.18691.1
MSTRG.18801.1

我用sed为文件2中的所有字符串写了单词边界。

file 2
\<MSTRG.18691.1\>
\<MSTRG.18801.1\>

并使用了grep -f file2 file1

但是输出有

MSTRG.18691.1.2
MSTRG.18801.1.3 also..

我想要精确匹配的行

MSTRG.18691.1
MSTRG.18801.1

不是,

MSTRG.18691.1.2
MSTRG.18801.1.3

我的文件中的几行1
t_name gene_name FPKM TPM
MSTRG.25.1 . 0 0
rna71519 . 93.398872 194.727926057583
gene34024 ND1 2971.72876 6195.77694943117
MSTRG.28.1 . 0 0
MSTRG.28.2 . 0 0
rna71520 . 33.235409 69.2927240732149

2 个答案:

答案 0 :(得分:1)

更新答案

您可以使用h2 Some heading <div id="some-heading"> <h2>Some heading</h2> </div> 运算符来匹配开头和开头。要完全匹配 MSTRG.18691.1 ,您可以在两端添加 ^ $ 并删除单词边界,此外start with ^具有特殊含义在正则表达式中的含义要完全匹配end with $,我们需要使用反斜杠.

进行转义

示例模式:

.

文件1

\

只需创建一个名为file1的普通文件,然后将以上内容粘贴到其中即可。

文件2 (样式文件)

^MSTRG\.18691\.1$
^MSTRG\.18801\.1$

只需创建一个名为file2的普通文件,然后将以上内容粘贴到其中即可。

从命令行运行以下命令

MSTRG.18691.1
MSTRG.1311.1
MSTRG.18801.2
MSTRG.18801.3
MSTRG.18801.1.2
MSTRG.18801.1.1
MSTRG.18801.1
PrefixMSTRG.18801.1

结果:

^MSTRG\.18801\.1$

Sed将更改添加到特征码文件

这里是grep -i --color -f file2 file1 ,用于转义MSTRG.18801.1 ,并在您已有的病毒码文件的开头和结尾处添加sed command.

^
  

-E以支持BSD sed上的扩展正则表达式,您可能需要根据系统的sed用-r替换-E

更新的模式将保存到file2_updated。需要像这样在grep中使用新的模式文件

$

答案 1 :(得分:0)

您要查找的标志是-F。来自man grep

  

-F,--fixed-strings

     

将PATTERN解释为固定字符串(而不是正则表达式)的列表,并用换行符分隔,其中任何一个都将被匹配。

您可以很方便地与-f结合使用:

grep -Ff file2 file1

请注意,这会将file2的每一行都与file1完全匹配。