如何从文件中 grep 多个关键字?

如何从文件中 grep 多个关键字?

我想使用 Unix 的grep函数可以在一个命令行中从文件中提取多行(使用不同的关键字)。

例如,我有类似的东西:

doc-A1-151
file-A2-15646
table-A3-1654
file-B1-15654
doc-B2-15654
table-B3-13546
file-C1-164654
doc-C2-16354
table-C3-13565

我想要一个仅包含 A1、B3 和 C2 行的文件的子版本。

我怎么做?

答案1

Grep 允许您使用正则表达式通过标志匹配文件内的模式-E,或者您可以使用egrep等效于以下命令grep -E

grep -E 'A1|B3|C2' filename

或者

egrep 'A1|B3|C2' filename

竖线|是“或”运算符,表示匹配字符串 A1 或 B3 或 C2。

正则表达式的语法因工具而异,但一般来说语法是相同的。下面是一个 Ruby 的正则表达式测试工具,我经常用它来测试和构建正则表达式:http://rubular.com/r/mJyIMO5hJN

然而,任何对正则表达式的介绍都应该以警告开头,即它们的能力是有限的,谚语是:

有些人在遇到问题时会想“我知道,我会使用正则表达式。” 现在他们有两个问题。

答案2

找到了。将术语放入以新行分隔的文本文件中,然后输入该文本作为与标志匹配的模式-f

模式文件.txt:

A1
B3
C2

命令:

grep -f pattern_file.txt input_file.txt

相关内容