V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
0x11901
V2EX  ›  问与答

如何使用 bash 找到当前目录及子目录中 C 标头文件中包含某一特定字段的文件路径及行数?

  •  
  •   0x11901 · 2019-04-23 18:21:35 +08:00 · 1200 次点击
    这是一个创建于 2070 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT 目前我的思路是使用 find 找到当前目录下所有头文件,然后使用 cat 打印其内容,再使用 grep 筛选关键字。问题是不知道怎么取到行数和路径,求指导。

    find . -name "*.h" -exec cat {} + | grep ${reg} 
    

    输出:

    - (id)fetchUsersByIds:(id)arg1 conversationId:(id)arg2;
    - (id)fetchUser:(long long)arg1 userSource:(long long)arg2 extModel:(id)arg3;
    - (id)fetchUsersByIds:(id)arg1 userSource:(long long)arg2 extModel:(id)arg3;
    - (id)fetchUser:(long long)arg1;
    
    zbinlin
        1
    zbinlin  
       2019-04-23 18:55:17 +08:00
    man grep

    * 加 -n 显示行数
    * 加 -H 显示文件路径
    0x11901
        2
    0x11901  
    OP
       2019-04-23 18:56:34 +08:00
    @zbinlin 然而我这是 cat 出来的,来源是(standard input)
    zbinlin
        3
    zbinlin  
       2019-04-23 18:58:22 +08:00   ❤️ 1
    find . -name "*.h" | xargs -i grep -nH ${reg} {}
    0x11901
        4
    0x11901  
    OP
       2019-04-23 19:03:39 +08:00
    @zbinlin 我改了一下:find . -name "*.h" -exec grep -nH ${reg} {} + 可行!,感谢🙏
    rrfeng
        5
    rrfeng  
       2019-04-23 21:15:45 +08:00 via Android
    grep -n -R xxx ./**/*.h
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3652 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:01 · PVG 13:01 · LAX 21:01 · JFK 00:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.