使用grep在每个文件的一行中返回匹配单词的列表

使用grep在每个文件的一行中返回匹配单词的列表,grep,Grep,我有一个文件列表,我想在这些文件中查找一些特定的关键字。输出应该是每个文件的一行,其中包含匹配项,显示我们只找到一次的单词。例如,如果我有以下文件test.txt one,two,three four,five,six, seven,eight,nine 我对单词5和8做了一个grep,它应该返回这样的结果: test.txt:five,eight 我对台词或匹配的数量不感兴趣。我只想知道每个文件中匹配的单词。我该怎么做?GNUgrep+awk解决方案: 假设我们有一个包含以下内容的文件te

我有一个文件列表,我想在这些文件中查找一些特定的关键字。输出应该是每个文件的一行,其中包含匹配项,显示我们只找到一次的单词。例如,如果我有以下文件test.txt

one,two,three
four,five,six,
seven,eight,nine
我对单词5和8做了一个grep,它应该返回这样的结果:

test.txt:five,eight
我对台词或匹配的数量不感兴趣。我只想知道每个文件中匹配的单词。我该怎么做?

GNUgrep+awk解决方案:

假设我们有一个包含以下内容的文件
test1.txt

one,two,three
four,five,six,
seven,eight,nine
one
two
three, four, five
test2.txt
,内容如下:

one,two,three
four,five,six,
seven,eight,nine
one
two
three, four, five
查找单词
five
eight
的匹配项:

grep -Hwo '\(five\|eight\)' test* 
| awk -F':' '{ a[$1]=(a[$1])? a[$1]","$2:$2 }END{ for(i in a) print i FS a[i] }'
输出:

test1.txt:five,eight
test2.txt:five

grep详细信息:

  • -H
    -打印每个匹配的文件名

  • -w
    -仅选择包含构成整词的匹配项的行

  • -o
    -仅打印匹配行的匹配(非空)部分

awk详细信息:

  • -F':'
    -字段分隔符

  • a[$1]=(a[$1])?[$1],“$2:$2
    -使用filename
    $1
    作为数组键来累加所有匹配的字


您必须添加自己的尝试来解决此问题。。。我不认为grep是个好选择。。搜索多个文件时,请将问题更改为至少包含两个文件和相关输出