我正在使用此命令在文件中查找几个单词
grep -iE "(foo|bar|test|something)" filename.txt
这工作正常,但它正在查找找到的单词的所有出现。例如,如果foo
找到 8 次,它将显示所有 8 个结果。
是否可以只显示唯一的结果?也许显示第一个。
答案1
有一个选项仅显示第一个匹配项。观察:
$ grep -iE "(foo|bar|test|something)" filename.txt
Foo 1
Bar 2
foo 3
Foo 4
现在,要将其限制为第一个匹配项,请添加-m1
:
$ grep -iEm1 "(foo|bar|test|something)" filename.txt
Foo 1
一个限制是,这只会显示第一个匹配项,而不是第一个foo
和第一个bar
,等等。
打印几个不同匹配项中的第一个
考虑这个测试文件:
$ cat filename.txt
Foo 1
Bar 2
foo 3
Foo 4
test 5
test 6
要打印显示的三个正则表达式中每一个的第一个匹配项:
$ awk -v a='[fF]oo [bB]ar [tT]est' 'BEGIN{split(a,b," ")} {for (i in b) if ($0~b[i] && !c[i]) {print; c[i]++}}' filename.txt
Foo 1
Bar 2
test 5
这是通过将您想要匹配的任何正则表达式放入变量中来实现的a
。 a
被分割成单词并放入 array 中b
。中的每个正则表达式b
都会针对每一行进行测试,并且仅打印每行的第一个匹配项。