我正在使用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
答案 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
完全匹配。