使用grep在每个文件的一行中返回匹配单词的列表
我有一个文件列表,我想在这些文件中查找一些特定的关键字。输出应该是每个文件的一行,其中包含匹配项,显示我们只找到一次的单词。例如,如果我有以下文件test.txt使用grep在每个文件的一行中返回匹配单词的列表,grep,Grep,我有一个文件列表,我想在这些文件中查找一些特定的关键字。输出应该是每个文件的一行,其中包含匹配项,显示我们只找到一次的单词。例如,如果我有以下文件test.txt one,two,three four,five,six, seven,eight,nine 我对单词5和8做了一个grep,它应该返回这样的结果: test.txt:five,eight 我对台词或匹配的数量不感兴趣。我只想知道每个文件中匹配的单词。我该怎么做?GNUgrep+awk解决方案: 假设我们有一个包含以下内容的文件te
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
-字段分隔符-F':'
-使用filenamea[$1]=(a[$1])?[$1],“$2:$2
作为数组键来累加所有匹配的字$1