Grep与多个字符串完全匹配,无破折号

Grep与多个字符串完全匹配,无破折号,grep,Grep,我有一个保存在变量中的基因列表: NOL6 NPPC NPRL2 NRG1 NT5C1B NUDT19 OSER1 PAEP PARD3 PCDHA4 我想grep把所有这些基因放在另一个txt上相同类型的列表中。我试过这个: grep -w "^$genes$" list.txt 问题是它返回给我的基因带有破折号-,类似于NT5C1B: NT5C1B-RDH14 但是,如果我单独搜索该基因: grep "^NT5C1B$" list.txt 我不

我有一个保存在变量中的基因列表:

NOL6
NPPC
NPRL2
NRG1
NT5C1B
NUDT19
OSER1
PAEP
PARD3
PCDHA4
我想
grep
把所有这些基因放在另一个txt上相同类型的列表中。我试过这个:

grep -w "^$genes$" list.txt
问题是它返回给我的基因带有破折号
-
,类似于NT5C1B:

NT5C1B-RDH14
但是,如果我单独搜索该基因:

grep "^NT5C1B$" list.txt
我不会用破折号获得基因,但只会:

NT5C1B

有没有办法使用
grep-w
或其他命令执行此操作?

使用
-x
,因为它只选择精确的匹配项
-w
可以匹配子字符串后面有非单词组成字符的字符串。请参阅。

-w
替换为
-x
?这是否回答了您的问题?我们需要在
list.txt
中查看一些文本,您的
$gene
变量中有什么?粘贴到第一个代码块时的单个条目或所有条目?@WiktorStribiżew我认为问题结束得可能太早了。。。“我不会用破折号获得基因,而只是:…”我猜OP想在结果中获得某种模式。另外,我们没有看到输入文本,我们不知道它是否是
-x
大小写。无论如何,OP没有清楚地描述需求。就这样,谢谢!如果除了这样的基因名称之外还有更多的列:
chr1 NT5C1B
。它会工作吗?@swimingbird它只会返回精确匹配的结果。因此,假设您希望返回“chr1 NT5C1B”,那么您需要执行
grep-x“chr1 NT5C1B”
。万一我只想grep基因名(NT5C1B)?