首页 > 解决方案 > 从文本文件中查找内容与某行匹配的文件

问题描述

我有一个文本文件 - accessions.txt(下面是这个文件的一个子集):

KRO94967.1
KRO95967.1
KRO96427.1
KRO94221.1
KRO94121.1
KRO94145.1
WP_088442850.1
WP_088252850.1
WP_088643726.1
WP_088739685.1
WP_088283155.1
WP_088939404.1

我有一个包含多个文件的目录(*.align)。

我想找到*.align内容与我的accessions.txt文本文件中的任何行匹配的文件名 ()。

我知道这find . -exec grep -H 'STRING' {} +可以找到特定的字符串(例如,将 STRING 替换为WP_088939404.1返回字符串所在的每个文件名WP_088939404.1)。

有没有办法STRING用“我的文本文件中的所有字符串”替换?

或者

还有另一种(更好的)方法可以做到这一点吗?

我试图避免编写一个循环来读取我所有文件的内容,因为它们太多了。

非常感谢!

标签: linuxbashgrepfind

解决方案


grep可以获取要匹配的模式列表-f

grep -lFf accessions.txt directory/*.align

-F告诉 grep 将这些行解释为固定字符串,而不是正则表达式模式。

有时,-w还需要防止匹配内部单词,例如

abcd

可能不仅匹配abcd,还匹配xabcdor abcdy。有时,如果规则更复杂,则需要预处理输入列表以防止不必要的匹配。


推荐阅读