我在下面的“ lxadmin ”目录中有许多 .conf 文件,并且怀疑文本“ tanguay.info ”在其中的某个地方。
我执行此命令:
cat /etc/httpd/conf/lxadmin/* | grep "tanguay.info"
它告诉我:
cat: /etc/httpd/conf/lxadmin/forward: Is a directory
Include /home/httpd/tanguay.info/conf/lxadmin.tanguay.info
所以我知道它在某个地方,但它没有告诉我在哪个文件中。
我怎样才能让它也告诉我文本位于哪个文件中?
grep "tanguay.info" /etc/httpd/conf/lxadmin/*,只要文件不在子目录中。
如果有子目录可以使用
或者
编辑:
您还可以使用ack,这是一个用 perl 编写的增强 grep(独立版本不需要依赖)。ack 默认通过目录递归搜索。
在 Ubuntu 上,您可以在 ack-grep 包中找到它。
您正在寻找的是
-H
显示grep
匹配文件名和匹配项的选项。您还可以添加-r
以递归方式搜索目录。IE寻找
寻找 。| xargs grep '字符串' -sl
-s 用于摘要,不会显示警告消息,例如 grep: ./directory-name: Is a directory
-l 用于列表,所以我们只得到文件名,而不是结果中显示的所有匹配实例。
显示 5 行之前和 3 行之后,以便您可以看到关键字的上下文
在理解文件中关键字的使用方式方面有很大的不同
在 Windows 系统上:
顺便说一句,引号必须在那里。
您可以使用反引号仅在文件中查找。[ ` -> 向左键到上方的数字 1 键到 Tab 键]
grep -wn "tanguay.info"
find /etc/httpd/conf/lxadmin/ -iname "*.conf"
上面的代码将首先获取 *.conf 文件,然后在结果中搜索“tanguay.info”。
在超级用户登录中运行上述命令,以避免出现权限问题。
下面的解决方案与上面 Izzy 的响应非常相似,但提供了更多的灵活性。当我需要做的事情超出 xargs 允许的范围时,我发现它非常有用(尤其是在旧的 SunOS 系统上,其中
grep -r
或rgrep
不可用)很简单,您正在查找所有 *.conf 文件并对找到的每个结果执行 grep。完成命令的
\;
-exec 部分。