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

时间:2017-06-03 12:09:47

标签: grep

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

one,two,three
four,five,six,
seven,eight,nine

我做了第五和第八个字的grep,它应该返回这样的东西:

test.txt:five,eight

我对线路或比赛数量不感兴趣。我只是想知道每个文件中匹配的单词。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

GNU grep + awk 解决方案:

我们说我们的文件test1.txt包含内容:

one,two,three
four,five,six,
seven,eight,nine
带有内容的

test2.txt

one
two
three, four, five

查找单词fiveeight的匹配项:

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])? a[$1]","$2:$2 - 使用文件名$1作为数组键来累积所有匹配的单词