我正在尝试使用 shell 脚本(以及“oneliner”)来查找大约 50 个文件之间的任何公共行。Edit:注意我正在寻找出现在所有文件中的一行(行)
到目前为止我已经尝试过 grepgrep -v -x -f file1.sp *
它只匹配所有其他文件中的文件内容。
我也尝试过grep -v -x -f file1.sp file2.sp | grep -v -x -f - file3.sp | grep -v -x -f - file4.sp | grep -v -x -f - file5.sp
等等...但我相信使用要搜索的文件作为 STD 进行搜索,而不是使用要匹配的模式。
有谁知道如何使用 grep 或其他工具来做到这一点?
我不介意运行是否需要一段时间,我必须向大约 500 个文件添加几行代码,并希望在每个文件中找到一个公共行,以便在“之后”插入(它们最初是只是从一个文件中进行 c&p,所以希望有一些共同点!)
谢谢你的时间,
当我第一次读到这篇文章时,我以为你试图找到“任何共同点”。我认为这意味着“查找重复行”。如果是这种情况,以下内容就足够了:
sort *.sp | uniq -d
重新阅读您的问题后,您似乎实际上是在尝试查找“出现在所有文件中”的行。如果是这种情况,您将需要知道目录中的文件数量:
find . -type f -name "*.sp" | wc -l
如果返回数字 50,您可以使用awk
像这样:
WHINY_USERS=1 awk '{ array[$0]++ } END { for (i in array) if (array[i] == 50) print i }' *.sp
您可以合并此过程并编写如下一行:
WHINY_USERS=1 awk -v find=$(find . -type f -name "*.sp" | wc -l) '{ array[$0]++ } END { for (i in array) if (array[i] == find) print i }' *.sp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)