使用银色搜索器搜索文件和文件名

Jik*_*ose 23 terminal command-line grep command-line-interface ack

使用Silver Searcher,我该如何搜索:

  1. 带有单词或模式AND的(非二进制)文件
  2. 所有文件名,包含包含二进制文件文件名的单词或模式.

其他偏好:希望通过dotfiles进行不区分大小写的搜索和搜索.


尝试使用这个别名没有太多运气:

alias search="ag -g $1 --smart-case --hidden && ag --smart-case --hidden $1"

vin*_*est 49

根据人工页面 ag

   -G --file-search-regex PATTERN
          Only search files whose names match PATTERN.
Run Code Online (Sandbox Code Playgroud)

您可以使用该-G选项对匹配模式的文件执行搜索.

那么,回答你的问题:

root@apache107:~/rpm-4.12.0.1# ag -G cpio.c size
rpm2cpio.c
21:    off_t payload_size;
73:    /* Retrieve payload size and compression type. */
76:     payload_size = headerGetNumber(h, RPMTAG_LONGARCHIVESIZE);
Run Code Online (Sandbox Code Playgroud)

上面的命令搜索size与模式匹配的所有文件中的单词cpio.c

参考:版本0.28.0的
手册页ag

注1:

如果您要查找某些文件类型中的字符串,例如所有C源代码,则会有一个未记录的功能,ag以帮助您快速将搜索限制为某些文件类型.

以下命令都foo在所有php文件中查找:

find . -name \*.php -exec grep foo {}
ag --php foo
Run Code Online (Sandbox Code Playgroud)

虽然find + grep查找所有.php文件,则--php在切换ag命令实际上查找下列文件扩展名:

.php  .phpt  .php3  .php4  .php5  .phtml
Run Code Online (Sandbox Code Playgroud)

您可以使用--cppC++的源文件,--hh.h文件,--js对JavaScript等等等等的完整列表,可以发现这里

  • @JikkuJose我认为社区同意这是对你的问题更好的答案. (3认同)

Zac*_*ogg 5

尝试这个:

find . | ag "/.*SEARCHTERM[^/]*$"
Run Code Online (Sandbox Code Playgroud)

该命令find .将列出所有文件。

我们将其输出传递给命令ag "/.*SEARCHTERM[^/]*$",如果文件名中包含SEARCHTERM,则该命令与SEARCHTERM匹配,而不仅仅是完整路径。

  • 几乎使用更简单的解决方案解决了一个变体: ag -g 。| ag 'search_term'; 是的,您的模式可用于过滤到文件名而不是路径。 (2认同)

Gre*_*reg 5

尝试将此添加到别名文件中.用zsh测试但应该使用bash.您在示例中遇到的问题是bash别名不能接受参数,因此您必须首先定义一个函数以使用参数,然后将您的别名分配给该函数.

searchfunction() {
  echo $(ag -g $1 --hidden)
  echo $(ag --hidden -l $1)
}

alias search=searchfunction
Run Code Online (Sandbox Code Playgroud)

您可以通过几种方式修改此示例以适合您的目的,例如

  • 添加/删除-l标志取决于您是否希望文本结果显示文本匹配或仅显示文件名
  • 添加标题以分隔文本结果和文件名结果
  • 重复数据删除结果以考虑在文件名和文本等方面都匹配的文件.

[编辑:根据Pablo Bianchi的评论删除不必要的--smart-case标志]

  • 您可以省略一个参数:`-S --smart-case`如果PATTERN中有任何大写字母,则区分大小写,否则不区分大小写.**默认启用.** (2认同)