只在 grep 中找到唯一的结果

只在 grep 中找到唯一的结果

我正在使用此命令在文件中查找几个单词

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

这是通过将您想要匹配的任何正则表达式放入变量中来实现的aa被分割成单词并放入 array 中b。中的每个正则表达式b都会针对每一行进行测试,并且仅打印每行的第一个匹配项。

相关内容