linux 在一个文件中搜索多个单词

标签 linux bash command

我有一个包含一组文本文件的文件夹。

-Folder
--- file 1
--- file 2
--- file 3
--- file 4

我有一组词,我想检查它是否在里面。 {word1, 用户名, blah blahblah}

有没有一种方法可以通过单个命令来发现这些文件中的哪一个包含我列表中的所有单词?

我看到可以使用一些和 grep,但我认为它们在单行上工作,而在我的情况下,wors 总是在不同的行上。

字数是静态的。总是 3 或 4,所以如果需要,我可以在命令中对它们进行硬编码。

编辑: 他们在 AND 中。如果文件中没有所有文件,则不接受该文件! 我想避免做 egrep -l 'word1' .| xargs egrep -l 'word2'

是否有更好的解决方案,只调用一次 grep?

干杯,

最佳答案

这对你有用吗?

grep -IRE 'word1|username|blah blahblah' /path/to/files/ | 
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' | 
awk -F: '$1!=p{if(b"" && c > 2)print b; p=$1;c=0;b=s=""}{b=b s $0;s=RS;c++}END
{if(b"" && c > 2)print b}' | awk -F: '{print $1}' | sort -u

第一部分(grep)将列出所有具有匹配模式的文件名。第二部分 (sed) 将从第一个输出中去除重复项,只给出不同的行。第三部分只会显示出现不止一次的文件,第四部分会去掉你匹配的模式,最后一个只会为你提供文件名 my friend。

我现在头疼...

关于linux 在一个文件中搜索多个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7584958/

相关文章:

c - 当 Linux 在 C 程序中崩溃时获得更好的调试

java - stdin 数据流的第一个字节是否会触发 bash 命令运行?

java - Win7,需要查看运行java.exe进程的详细命令行信息

linux - 为 WHM/cPanel 设置 CentOS 服务器的最安全、完整的过程是什么?

linux - xargs(或其他东西)参数前没有空格

linux - 强制 cli 实用程序在不提供配置选项且仅写入文件时写入 stdout

linux - shell/awk 脚本在 ubuntu/mint 上运行良好,但在 red hat 上运行不正常

windows - Yarn vs npm,WSL 的好处

php - 在 Doctrine Fixtures Load 中访问命令输出接口(interface)

python - 如何从 python 中的日期命令输出中删除不必要的字符