知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议进行许可。

安装
github: https://github.com/ggreer/the_silver_searcher, brew info ag 可以查看到。

osx下安装:
brew install ag
说明
ag的版本信息: 
    the_silver_searcher: stable 0.31.0 (bottled)
使用
下载PHP源码进行操作

wget http://cn2.php.net/get/php-5.6.16.tar.gz/from/this/mirror -O ./php-5.6.16.tar.gz
tar zxvf php-5.6.16.tar.gz
cd php-5.6.16
  • 递归查找

    以前使用 grep 在 /ext/standard 这个目录递归查找c文件中包含 RETURN_STRING,使用下面命令之一:
    grep -n "RETURN_STRING(" /dev/null $(find ./ext/standard -name "*.c" | sort)
    grep -rn --include "*.c" "RETURN_STRING(" ./ext/standard
    
    而使用ag:    
    ag -G ".c$" "RETURN_STRING\(" ./ext/standard 
    
  • 显示前后几行

    以前要显示结果的前后三行:
    grep -A3 -B3 -rn --include="*.c" "RETURN_STRING(" ./ext/standard 
    
    这个....我一直不知道有"-C3", 刚开始工作的时候就用-A -B, After, Before很好记。。
    后来知道了可以有:
    grep -C3 -n "RETURN_STRING(" /dev/null $(find ./ext/standard -name "*.c" | sort)
    grep -C3 -rn --include "*.c" "RETURN_STRING(" ./ext/standard
    
    ag也一样,-C不加行数,默认是2
    ag -C3 -G ".c$" "RETURN_STRING\(" ./ext/standard
    
  • 排除文件

    grep -rn --include="*.c" --exclude=uniqid.c "RETURN_STRING(" ./ext/standard
    
    ag --ignore "uniqid.c" -G ".c$" "RETURN_STRING\(" ./ext/standard
    
  • 显示查找到的文件列表

    ag --ignore "uniqid.c" -G ".c$" "RETURN_STRING\(" ./ext/standard *.c -l
    
  • 使用分页

    ag -C5 -G ".h$" "zval;" . --pager less