- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尽管
grep -ir "xyz"* 递归搜索目录并告诉我文本存在于 ./x/y/z/abc.cpp
然而 ,
grep -ir "xyz"*.cpp 没有结果。
第二个命令不是应该递归地grep目录中的所有cpp文件吗?
我在这里缺少什么?
最佳答案
Grep 将遍历与您的 glob 模式匹配的任何目录。 (在您的情况下,您可能没有任何与模式“*.cpp”匹配的目录)您可以明确指定它们:grep -ir "xyz" *.cpp */*.cpp */*/*.cpp */*/*/*.cpp
等。您还可以使用 --include 选项(请参见下面的示例)
如果您使用的是 GNU grep,则可以使用以下命令:
grep -ir --include "*.cpp" "xyz" .
上面的命令说从当前目录开始递归搜索,忽略模式上的大小写,只搜索匹配全局模式“*.cpp”的文件。
find ./ -type f -name "*.cpp" -print0 | xargs -0 grep -i "xyz"
如果您确定所有文件的名称中都没有空格,则可以省略
-print0
要查找的参数和
-0
到 xargs
grep -ir "xyz" *.cpp
不像您认为的那样工作,您应该搜索“shell globbing”(
here 是关于该主题的第一篇很好的文章)。我也会尝试提供一个快速的解释。当您输入命令时
grep -ir "xyz" *.cpp
并按回车键,有两个程序参与执行您的命令。第一个程序是你的 shell(除非你做了一些自定义的事情,你可能通常是 bash shell——如果你从未听说过 shell 或 bash,那就是你应该开始寻找的地方,有很多好的文章)。可以说 shell 只是一个程序,旨在让您浏览计算机上的文件系统并运行其他程序。 (在 Windows 中,当您双击图标启动程序,或打开文件夹访问文件时,您运行的程序是 explorer.exe,它是 Windows 图形 shell )。所以,当你输入命令
grep -ir "xyz" *.cpp
, 在 grep 运行之前,shell 会处理读取您的命令并执行一些操作。其中一件事就是扩展全局模式(例如
*.txt
或
[0-9]+.pdf
)。就像我说的,如果你想了解它,去阅读更多关于它的信息,但你应该带走的是grep命令永远不会看到
*.cpp
.发生的情况是,shell 在当前目录中查找名称与模式
*.cpp
匹配的任何文件或目录。然后在运行 grep 命令之前在命令行上替换它们。 (如果它没有找到任何匹配的东西,那么它会将
*.cpp
留在那里并且 grep 会看到它,但是 grep 因为通常不进行 glob 匹配,这对你没有任何作用)。
grep -ir "xyz" *
时,发生的情况是 shell 替换了
*
使用当前目录中每个文件和目录的名称(因为
*
匹配任何内容)。假设您有一个包含 file1、file2 和 dir1 和 dir2 的目录,那么 shell 将执行其替换,然后执行如下所示的命令
grep -ir "xyz" file1 file2 dir1 dir2
,这意味着 grep 将在 file1 和 file2 中搜索包含字符串 xyz 的行,并且因为
-ir
它还通过 dir1 和 dir2 递归搜索并搜索为该字符串找到的任何文件。最后,如果你已经遵循了我到目前为止所说的一切,那么 grep 确实有一种方法可以在递归搜索中使用 glob 模式,那就是使用
--include
选项,如我之前描述的命令:
grep -ir --include "*.cpp" "xyz" .
,以及为什么我们把
*.cpp
该命令中的引号是为了防止 shell 在我们运行该命令之前尝试扩展 glob 模式。
关于grep 递归文件名匹配 (grep -ir "xyz"*.cpp) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797488/
('xyz' != 'xyz') 和 NOT ('xyz' = 'xyz') 之间有什么区别吗? 虽然我在 Oracle DB 的上下文中询问,但也想知道其他语言的相同情况。 差异主要在于处理速度和所
我注意到定义了 simpleType 或 complexType,并且在模式文件中的多个元素的声明中使用了这些类型,simpleType 或 complexType 生成了一个方法签名作为“JAXBE
我在 XYZ 的 3D 空间中将对象旋转 90 度步长 (rX rY rZ)。角度限制为 0-360 度,我使用以下命令来旋转矩阵: Matrix.rotateM(mModelMatrix, 0, r
recursivePrint 函数将递归地显示文件和文件夹,我已经调用了一个函数来搜索文件中的单词此代码适用于小号。文件数但是当我使用所有目录时,它给出了内存不足错误java堆空间 File[] ma
我有一个简单的 html 网站,其中包含 50 多个 html 页面。从 statistics-script 中,我有时会在 xyz.html/(重定向到 404)而不是 xyz.html 之类的页面
我对一个位置(原始文件夹)中的所有文件进行哈希处理,然后将哈希值写入变量,然后对另一位置(目标文件夹)中的所有文件执行相同的操作: $origin = Get-ChildItem .\Test1 |
我正在编写一个包含键值对集合的重要类,在编译期间我收到一个我无法弄清楚的非常奇怪的错误。在一个与这里的函数非常相似的函数中,但由于所需代码的复杂性而没有上下文,我收到错误: TValue& opera
我正在尝试做一些非常简单的事情。 场景如下:我有一个整个网站与支持推送状态的浏览器配合得很好。该网站的工作基础是该语言是“实际页面”,例如: /en/whatever/etc = index.en.
在java脚本(或jquery)中,有什么区别 var a = xyz[] var a = xyz{} 我在互联网上搜索但找不到任何答案?如果有任何差异,请告诉我。 最佳答案 这是无效的语法。 var
我正在通过以下步骤在 Android 中进行 JSON 解析: 使用 HttpPost 对象从网络服务获取 XML 响应。 将此 XML 转换为 JSON 字符串,然后再转换为 JSON 对象。 现在
有什么区别: class A { public: void virtual method1() {...}; virtual void method2() {...}; }; 编译器(编辑:Apple
我正在尝试使用 configure、make、make install 三部曲来编译 c 源代码。 由于我想编译源代码,以便它们使用默认情况下未使用的另一个库 (XYZ),因此我可以使用 ./conf
在 MySQL 中,如何将表的列名从“sum(xyz)”更改为“xyz”?我已经尝试了以下解决方案来更改列名: Change Column Name in MySQL Rename column SQ
不能覆盖委托(delegate)函数, didFinishLaunchingWithOptions 和其他与应用程序委托(delegate)相关的函数都很好,但是当我尝试使用 application(
Tally-ho 小伙子们, 这个问题认为线性代数的艺术是数学中我无法解决的地方。所以我希望你们能帮助我 :D。 我正在尝试为一款名为《骑马与砍杀》的游戏创建单人自动踢球作弊。这个 autokicke
我正在 typescript 中访问导入的nodejs模块的函数,编译器会为每个方法调用或属性访问发出给定的错误。这是我的声明: import imageProc = module('imagePr
这个问题在这里已经有了答案: What is wrong with below code (3 个答案) What does sizeof(&array) return? (4 个答案) 关闭 9
为了好玩,我决定制作类似于 Markdown 的东西。根据我过去对正则表达式的一些小经验,我知道它们有多么强大,所以它们将是我所需要的。 所以,如果我有这个字符串: Hello **bold*
假设我有一个目录,里面有一堆网站名称。 即 dev.domain.com dev.domain2.com dev.domain3.com 如何将它们重命名为 .com在使用管道和/或重定向 bash
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: difference between string object and string literal 你好, 首先
我是一名优秀的程序员,十分优秀!