grep 字符串与字母和数字的精确匹配
grep exact match of string with alphabets and numbers
我正在使用 grep 从文件 1 中提取与文件 2 中的字符串匹配的行。文件 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<br>
MSTRG.25.1 。 0 0<br>
核糖核酸71519。 93.398872 194.727926057583<br>
基因 34024 ND1 2971.72876 6195.77694943117<br>
MSTRG.28.1 。 0 0<br>
MSTRG.28.2 。 0 0<br>
核糖核酸71520。 33.235409 69.2927240732149
更新答案
您可以使用 start with ^
和 end with $
运算符来匹配 start with 和 begin with。要完全匹配 MSTRG.18691.1 您可以在两端添加 ^ & $ 并删除单词边界, 此外 .
在正则表达式中具有特殊含义以精确匹配 .
我们需要用反斜杠转义 \
示例模式:
^MSTRG\.18691\.1$
^MSTRG\.18801\.1$
文件1
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
新建一个普通文件file1,将上面的内容粘贴进去即可
file2(花样文件)
^MSTRG\.18801\.1$
新建一个普通文件file2,将上面的内容粘贴进去即可
运行 来自命令行的以下命令
grep -i --color -f file2 file1
结果:
MSTRG.18801.1
sed 添加对模式文件的更改
这里是 sed command
转义 .
并在您已有的模式文件的开头和结尾添加 ^
和 $
。
sed -Ee 's/\./\./g' -e 's/^/\^/g' -e 's/$/$/g' file2 > file2_updated
-E to support extended regex on BSD sed, you may need to replace -E with -r based on your system's sed
更新的模式将保存到 file2_updated。需要像这样在 grep 中使用新的模式文件
grep -i -f file2_updated file1
您要查找的标志是-F
。来自 man grep
:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings (instead of regular expressions), separated by newlines, any of which is to be matched.
您可以将其与 -f
结合使用:
grep -Ff file2 file1
明确地说,这会将 file2
的每一行都视为与 file1
.
的完全匹配
我正在使用 grep 从文件 1 中提取与文件 2 中的字符串匹配的行。文件 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<br>
MSTRG.25.1 。 0 0<br>
核糖核酸71519。 93.398872 194.727926057583<br>
基因 34024 ND1 2971.72876 6195.77694943117<br>
MSTRG.28.1 。 0 0<br>
MSTRG.28.2 。 0 0<br>
核糖核酸71520。 33.235409 69.2927240732149
更新答案
您可以使用 start with ^
和 end with $
运算符来匹配 start with 和 begin with。要完全匹配 MSTRG.18691.1 您可以在两端添加 ^ & $ 并删除单词边界, 此外 .
在正则表达式中具有特殊含义以精确匹配 .
我们需要用反斜杠转义 \
示例模式:
^MSTRG\.18691\.1$
^MSTRG\.18801\.1$
文件1
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
新建一个普通文件file1,将上面的内容粘贴进去即可
file2(花样文件)
^MSTRG\.18801\.1$
新建一个普通文件file2,将上面的内容粘贴进去即可
运行 来自命令行的以下命令
grep -i --color -f file2 file1
结果:
MSTRG.18801.1
sed 添加对模式文件的更改
这里是 sed command
转义 .
并在您已有的模式文件的开头和结尾添加 ^
和 $
。
sed -Ee 's/\./\./g' -e 's/^/\^/g' -e 's/$/$/g' file2 > file2_updated
-E to support extended regex on BSD sed, you may need to replace -E with -r based on your system's sed
更新的模式将保存到 file2_updated。需要像这样在 grep 中使用新的模式文件
grep -i -f file2_updated file1
您要查找的标志是-F
。来自 man grep
:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings (instead of regular expressions), separated by newlines, any of which is to be matched.
您可以将其与 -f
结合使用:
grep -Ff file2 file1
明确地说,这会将 file2
的每一行都视为与 file1
.