- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以我想在我的项目中找到 NLog 的用途,我使用 git grep 为我这样做,但它发现的情况比我需要的多:
git grep NLog
GETA.Seo.Sitemap/Geta.SEO.Sitemaps.csproj: <Reference Include="NLog, Version=2.1.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
GETA.Seo.Sitemap/Geta.SEO.Sitemaps.csproj: <HintPath>..\packages\NLog.2.1.0\lib\net45\NLog.dll</HintPath>
GETA.Seo.Sitemap/Services/CloudinaryService.cs: NLogger.Exception("Could not transform image", exception);
GETA.Seo.Sitemap/Services/CloudinaryService.cs: NLogger.Warn("Url for cloudinary id was null");
GETA.Seo.Sitemap/Services/CloudinaryService.cs: NLogger.Warn("Could not locate file object for cloudinary id in EpiServer");
....
etc
当然,它找到了我要找的东西,但我想过滤到仅以 .cs
结尾的文件。所以我尝试这样做:
git grep NLog **/*.cs
Web/Global.asax.cs: NLogger.Info("Meny application start");
只要一击,我上面的两场比赛都没有列出来。我发现这很奇怪,我可能误解了 git grep 的 globbing 匹配。有没有大佬解惑一下?
最佳答案
(术语注释,对于阅读此答案的任何人:扩展诸如 *.cs
之类的内容称为“globbing”,1 with *.cs
作为一个“shell glob”。一个“shell”是你的命令行解释器,它可以是sh
、bash
、zsh
、dash
, tcsh
, 等等。Git 有它自己内置的通配符。扩展的字符称为通配符,它们包括 *
、?
和 [
。一些 shell 还特别对待 {
,这是使用 Git 的 reflog 时的一个问题 名称,如 master@{yesterday}
或 stash@{2}
。所有这些都可以引用。)
在这个特殊情况下的问题——它可能会或可能不会发生在其他人身上,这取决于他们使用的是哪个 shell 和他们的环境——是一个未 protected (未引用的)*
经历了 shell globbing。某些 shell,例如 bash,将或至少可以以与 Git 相同的方式扩展 **
,这意味着“递归到子目录”。其他人不能,或者取决于设置,不会。2
如果您的 shell 扩展 **/*.cs
以包含名称 Web/Global.asax.cs
但不包含 GETA.Seo.Sitemap/Services/CloudinaryService.cs
(因为它在目录的下一级),然后当 Git 获取名称时,为时已晚:通配符 *
字符消失了。 Git 永远看不到它们,也不能自己做 globbing。
简单的解决方案是通过引用来保护通配符免受 shell 通配符的影响:
git grep '**/*.cs'
(成对的双引号——如在 git grep "**/*.cs"
中一样——在大多数 shell 中也有效,前缀反斜杠在代替引号使用时也有效,如在 git grep\*\*/\*.cs
:只需用反斜杠保护每个易受攻击的字符)。对于许多 Git 命令——它对 git grep
没那么重要,除非你正在 grep 旧的提交——最好始终保护所有通配符,以便它们传递给 Git,因为 Git将扩展它们针对当前工作树以外的其他东西。 shell 只看到工作树。3)
虽然它依赖于 shell,但有时通配符会匹配nothing 然后被传递。例如,如果您没有名为 sub
的目录并且您编写了 sub/*
,则一些(不是全部)shell 将传递文字文本 sub/*
到你运行的命令。4 在这种情况下,如果命令是 Git 命令,它可以再次进行自己的通配。依赖于此是不明智的,因为一旦有要匹配的内容,shell 就会进行匹配,而不是将原始通配符传递给程序。
1名称“glob”是“global”的缩写,在非常早期的 shell 中,它是由名为 glob
的外部程序完成的。 Early versions of Unix ran on machines with as little as 64 kilobytes of memory ,因此没有太多空间用于花哨的壳内扩展。参见 https://en.wikipedia.org/wiki/Glob_(programming)了解更多。
2在 bash 中,Git 风格的扩展是通过设置变量 globstar
来控制的。
3这甚至可能包括 .git
存储库子目录本身,这通常很糟糕。在 bash 中,这是由变量 dotglob
控制的。
4在 bash 中,这是由 failglob
控制的。
请注意,bash 提供了每个可能的 shell 的几乎所有可能的行为。它试图成为一种通用外壳。当然,这意味着它也需要所有这些控制变量,这使得 bash 变得相当大。您永远无法在 64K 非拆分 I&D PDP-11 上运行它。
关于git - 为什么 git grep 中的文件 glob **/*.cs 不显示所有 *.cs 命中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40659139/
关于 APC 操作码缓存,什么是“命中与未命中”?我已经安装了 APC 并且它运行良好,但我有“一些”失误,我想知道这是否“不好”。此外,我正在运行 Openx,因此,我很快就会填满“缓存完整计数”。
我试过这个: def test_send_confirm_hit(monkeypatch): hit = False def called(): global hit
是否可以将找到的单词插入到替换中? $(function() { content = 'hallo mein name ist peter und ich komme aus berlin.
我有一个允许用户将文件上传到文件夹的网站。首先,我检查文件是否存在,如果存在,然后检查复选框的值以确定用户是否要覆盖现有文件。如果点击上传并且未选中该框,我会执行一个带有消息和后退按钮的 die()
我有多个不同的进程通过 IPC 进行通信,当使用 gdb 调试单个进程时,每当遇到断点时,我都会尝试向其他进程发送消息。有没有一种方法可以自动在遇到断点时自动调用一个函数/一段代码(NotifyAll
目前,通过管道传输到 jq 的 cat 命令帮助我解析工作目录中的多个 JSON 文件,并根据正则表达式模式匹配文件中所有可用的电子邮件 ID。但是,我很想识别正则表达式模式被命中/匹配的文件名 ca
我们希望将 podname 解析为 IP,以在 akka 集群中配置种子节点。这是通过在 Kubernetes 中使用 headless (headless)服务和有状态集的概念来实现的。但是,如何在
Maven 项目具有以下文件夹结构: src/main/java src/main/resources src/test/java src/test/resources 如果我们导航到 Maven 项
我只使用 c 几个星期,所以很可能会出现我忽略的明显错误。我看过其他线程,但我不明白我正在读的很多内容。该程序假设有一个无限大的牌组。 已知问题: clearBuffer 当前未使用,我正在尝试不同的
我已将我的 AdMob 代码实现到我的 XML 文件中,如下所示: 在我的 Activity 的 onCreate 方法中: // load ads
我的作业是通过示例程序确定给定跟踪文件的缓存读/写/未命中/命中次数。 举例来说,这是示例跟踪输出的前 10 行。 0x37c852: W 0xbfd4b18c 0x37cfe0: W 0xbfd
https://plnkr.co/edit/2h6fV5yTjeUqLP3SvbvO?p=preview 预期 登录后应用程序重定向到 $state container,其中包含 dashboard
ElasticSearch 独立于 from 和 size 参数,基于查询的所有命中构建聚合结果。在大多数情况下,这是我们想要的,但我有一个特殊情况,我需要将聚合限制为前 N 个命中。 limits
我使用 Intel PCM 进行细粒度的 CPU 测量。在我的代码中,我试图测量缓存效率。 基本上,我首先将一个小数组放入 L1 缓存(通过多次遍历),然后启动计时器,再遍历数组一次(希望使用缓存),
我在为 javascript 滑动元素定义点击区域时遇到问题。 参见示例: http://www.warface.co.uk/clients/warface.co.uk/ 请滑过右侧的灰色框以显示按钮
我正在尝试在 foldersystem 中使用 os.walk() 找到几个 'my_file.bat',如果文件名匹配它应该用 subprocess.call() 或 .run() 调用。问题是 o
我有一个端点,我可以在其中请求我使用 Siesta 查询的多条数据(例如 https://example.com/things?ids=1,2,3) .如果我只缓存了一些 things ,我试图弄清楚
这是我的代码: public static function test(){ try{ $apiContext = ApiContext::create(
我使用 PHP 在需要时传递登录表单,代码如下: $htmlForm = ''.''; switch(LOGIN_METHOD) { case 'both': $htmlFor
我正在使用 nginx-lua带有 redis 的模块提供 ember-app 的静态文件. index文件内容存储在redis作为 value由 nginx 正确提供服务当(根)domain/IP被
我是一名优秀的程序员,十分优秀!