我在同一文件夹中的不同文件中对文本文件进行了多个修订。
我怎么能够grep
该文件夹中的所有文件都没有列出具有相同文本的任何重复行?
答案1
怎么样
cat * | grep exampletext | sort -u
答案2
我用:
grep -h test files* | puniq
puniq
是:perl -ne '$seen{$_}++ or print;'
它类似于,sort -u
但它不对输入进行排序,而是在运行时提供输出。
如果您需要文件名并避免每个文件中出现重复行:
parallel --tag --lb 'grep string {} | puniq' ::: files*
如果您需要文件名并且不希望任何文件中存在重复行(文件名不得包含 TAB (\t)):
parallel --tag --lb grep string {} ::: files* |
perl -ne '/^[^\t]+(.*)/ and $seen{$1}++ or print;'
答案3
也许这样的东西可能接近你的想象(与 gnu awk 一起使用):
cat file1
1
2
3
22
cat file11
1
2
3
8
9
cat file111
1
2
3
5
6
awk '{seen[$0]++;fname[$0]=FILENAME};END{for (k in seen) {if (seen[k]==1) print fname[k],":",k}}' file1*
file111 : 5
file111 : 6
file11 : 8
file11 : 9
file1 : 22
答案4
将结果通过管道传送到 sort 以过滤重复项。
grep -re pattern files and dirs ... | sort -ut: -k2
sort的-t:
和-k2
选项将导致它在进行排序和合并时忽略文件名。
或者,如果您不需要文件名,只需:
grep -hre pattern files and dirs ... | sort -u