我正在使用ag
(The Silver Searcher)版本 0.31.0。我可以使用以下方法轻松地在一堆文件中查找字符串:
localhost:workspace davea$ ag 'ftp' .
Run Code Online (Sandbox Code Playgroud)
但是如果我只想扫描具有某些扩展名的文件怎么办?我试过这个:
localhost:workspace davea$ ag 'ftp' .java
ERR: Error stat()ing: .java
ERR: Error opening directory .java: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但得到了你在上面看到的错误。
有一个选项--ignore
允许指定要忽略的文件。目前我只能通过执行来忽略多个文件--ignore file1 --ignore file2.......
尝试使用--ignore "*assets*|*scripts*"
没有任何作用。那么有什么我不知道的问题吗?
我正在考虑使搜索更快和/或更好的方法,主要使用fgrep
or ag
。and
不区分大小写地搜索单词at$HOME
并将匹配列表重定向到的代码vim
find -L $HOME -xtype f -name "*.tex" \
-exec fgrep -l -i "and" {} + 2>/dev/null | vim -R -
Run Code Online (Sandbox Code Playgroud)
这是更快,有ag
因为并行的和ack
find -L $HOME -xtype f -name "*.tex" \
-exec ag -l -i "and" {} + 2>/dev/null | vim -R -
Run Code Online (Sandbox Code Playgroud)
小群的平均统计信息fgrep
,并ag
通过time
fgrep ag terdon1 terdon2 terdon3 muru
user 0.41s 0.32s 0.14s 0.22s 0.18s 0.12s
sys 0.46s 0.44s 0.26s 0.28s 0.30s …
Run Code Online (Sandbox Code Playgroud) 我想使用ag在 python 文件中打印类及其方法。我认为这很容易使用:
ag --context=0 --nocolor -os '^\s*(def|class)\s+[_A-Za-z]*' prog.py
Run Code Online (Sandbox Code Playgroud)
但由于我不明白的原因,这也匹配空行。例如,如果您将 prog.py 设为以下内容
class MyFavouriteClass
def __init__
def __contains__
blah
class MyNextFavouriteClass
def _repr_
def __iter__
Run Code Online (Sandbox Code Playgroud)
然后它返回完整的文件,包括空行,但包含blah
. 当然,我总是可以将输出通过管道传输到其他内容中以删除空行,但我宁愿第一次就把它做好。
我怀疑这个问题与正则表达式无关,相反,它是ag
s--context
和flags--after
的一个功能--before
,但我找不到这些功能的组合来满足我的要求。
有任何想法吗?