V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hjue
V2EX  ›  程序员

有人用 ripgrep(rg) 吗?

  •  
  •   hjue · 2021-12-09 11:20:28 +08:00 · 1821 次点击
    这是一个创建于 1117 天前的主题,其中的信息可能已经有所发展或是发生改变。

    typora 的搜索不好用。

    一直在用 ripgrep 搜索我的 md 文档,非常好用。

    今天想对搜索结果时间倒排,找到含有关键字的最新文章。

    发现排序功能

    rg   --sortr modified keyword 
    

    发现搜索结果并不是按文件修改时间倒排,有谁知道是哪里的问题吗?

    12 条回复    2022-01-12 18:34:20 +08:00
    ynyounuo
        1
    ynyounuo  
       2021-12-09 11:53:19 +08:00
    我用 ls --time-style='+%d-%m-%Y %H:%M:%S' -l; rg --sortr modified '{keywords}' 试了试好像没啥问题
    felixin
        2
    felixin  
       2021-12-09 12:01:25 +08:00 via Android
    silver search
    yanbo92
        3
    yanbo92  
       2021-12-09 17:05:42 +08:00 via iPhone
    看名字像是搜索死人的
    ProPh3t
        4
    ProPh3t  
       2021-12-09 17:08:30 +08:00
    @yanbo92 rest in peace, `grep`...
    Leviathann
        5
    Leviathann  
       2021-12-09 18:21:16 +08:00
    @yanbo92 名字的确是要 grep 去死
    hjue
        6
    hjue  
    OP
       2021-12-09 19:01:00 +08:00
    @ynyounuo 我用的是 mac ,不支持--time-style ,可能是这个原因导致的。 有时间看看 ripgrep 的代码,找找原因
    ynyounuo
        7
    ynyounuo  
       2021-12-09 19:05:23 +08:00
    @hjue
    和 ls 没关系吧,ls -lT 试试
    hjue
        8
    hjue  
    OP
       2021-12-09 19:15:24 +08:00
    @felixin ag 怎么支持搜索结果按时间倒排?
    hjue
        9
    hjue  
    OP
       2021-12-10 11:13:59 +08:00
    @ynyounuo 一个目录下排序没有问题。包含子目录有问题。

    相关代码在这里 https://github.com/BurntSushi/ripgrep/blob/9f924ee187d4c62aa6ebe4903d0cfc6507a5adb5/crates/core/args.rs

    ```
    match self.kind {
    SortByKind::None => {}
    SortByKind::Path => {
    if self.reverse {
    builder.sort_by_file_name(|a, b| a.cmp(b).reverse());
    } else {
    builder.sort_by_file_name(|a, b| a.cmp(b));
    }
    }
    SortByKind::LastModified => {
    builder.sort_by_file_path(move |a, b| {
    sort_by_metadata_time(a, b, self.reverse, |md| {
    md.modified()
    })
    });
    }
    SortByKind::LastAccessed => {
    builder.sort_by_file_path(move |a, b| {
    sort_by_metadata_time(a, b, self.reverse, |md| {
    md.accessed()
    })
    });
    }
    SortByKind::Created => {
    builder.sort_by_file_path(move |a, b| {
    sort_by_metadata_time(a, b, self.reverse, |md| {
    md.created()
    })
    });
    }
    }
    ```
    ynyounuo
        10
    ynyounuo  
       2021-12-10 13:02:25 +08:00
    @hjue
    rg 是这样设计的而且有人提了类似的 feature request 也没有被 maintainer 认可
    https://github.com/BurntSushi/ripgrep/issues/1298

    倒是你可以试试他的 workaround 改成一个 function 来用
    xieyuheng
        11
    xieyuheng  
       2022-01-11 20:42:19 +08:00
    还有两个类似的是 ambs ambr ,我经常用这个还有 ag 。

    https://github.com/dalance/amber
    hjue
        12
    hjue  
    OP
       2022-01-12 18:34:20 +08:00
    @xieyuheng ag 貌似没有排序的功能。

    我比较了一下 rg 和 ag 的搜索结果,发现他们两个搜索结果的排序也不相同。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1077 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:32 · PVG 03:32 · LAX 11:32 · JFK 14:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.