我想使用 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