你的问题标题是“包含”一个单词的文件。但是,在您的问题中,您确实提到“获取包含”一个单词的文件名。这些是不同的东西。幸运的是,它们都很简单,所以我只会告诉你们两者。
要查找包含单词的文件:
grep -iR“word1”。
-i说要忽略大小写。 -R是递归的(意味着搜索子目录)。 (大写字母由OpenBSD记录,更类似于ls,所以我更喜欢over -r。)句点指定从哪里开始查找。
要查找包含单词的文件名:
找 。 -我的名字 ” 字1 “
-iname是“name”的不区分大小写的版本。
期间指定从哪里开始寻找。当前目录通常是一个不错的选择。
注意:你引用了“ 。 “在你的一个例子中。对于DOS来说这很好,在Microsoft Windows中通常很好,但对于Unix环境来说这是一个非常糟糕的习惯。看到这让我觉得你对Windows很熟悉。好吧,在Windows中理解,” FIND“(或”find“)在文件中定位文本.Unix不同:”grep“在文件中定位文本,”find“定位文件名。
现在,要排除单词99,并将其放在文本文件中,请添加以下文本:
| grep -v word99>> output.txt的
这是管道密钥,几乎总是Shift-Backslash。
因此,举例来说,如果您想同时执行这两项操作,请使用:
grep -iR“word1”。 | grep -v word99>> output.txt的
找 。 -我的名字 ” 字1 “| grep -v word99>> output.txt
管道字符前面的部分将运行一个命令,并将输出发送到Unix样式的管道。然后,内容从管道发送到下一个命令的标准输入。 grep -v将查看它接收的标准输入,并排除您想要的内容。 grep -v会将剩余的结果发送到其标准输出。 >>将先前命令的标准输出重定向到指定文本文件的末尾。
你没有在“查找”命令中看到有关如何排除文本的文档选项的原因是,Unix的设计非常重视这个简单程序的想法,并使用管道技术来产生精细的效果。在Microsoft环境中,旧的Microsoft代码在管道处理方面特别麻烦,因此程序基本上尝试将更多功能合并到每个程序中。一方面,对于最终用户来说这似乎更简单(内置所有内容),但这种方法缺乏一致性。当你使用Unix时,不要害怕管道:一旦你习惯了它,你可能会发现它大大简化了事情,但是因为你可以在很多情况下使用你的简单工具,所以你不需要反复学习简单的技巧(针对每个不同的程序)。
grep -r … *
几乎总是写得更好grep -r … .
。如果当前目录中有太多文件等,则星号版本会变得很难看。