2012-07-29 38 views
1

如何在不输入排除模式的情况下排除ack排除的文件(临时文件和版本控制目录)?如何将grep配置为更像ack?

作为described here,你可以使用GREP_OPTIONS,但是然后你运行到problems here:使用grep而不清除GREP_OPTIONS的脚本将会中断。

什么是更好的方法?别名?或者其他包装grep的脚本?

虽然明显的答案是alias grep="ack -a",但我对如何在不使用ack的情况下解决此问题感兴趣。

+0

另外:ack 2.0可以消除'-a'和'-u'标志。 2.0中的默认值是选择所有文本文件进行搜索,而不管文件类型如何。 – 2012-07-30 14:01:36

+0

另外,请注意'ack -a'仍然不等于'grep',因为ack仍然会忽略某些目录和文件。 '-a'表示“所有文件类型”,而不是“所有文件”。 – 2013-04-11 21:34:47

+0

从grep 2.20开始,不推荐使用GREP_OPTIONS:https://lists.gnu.org/archive/html/grep-commit/2014-09/msg00007.html – idbrii 2015-08-05 16:22:35

回答

0

我目前的解决方案是使用别名来限制我的智能选项对我的交互式输入(而不是其他人的脚本)的使用。这是从我的bash_aliases grep的相关片段:

SMART_GREP_OPTIONS= 

# Ensure colors are supported. 
if [ -x /usr/bin/dircolors ]; then 
    SMART_GREP_OPTIONS=' --color=auto' 
fi 


# Make grep more like ack. 
# Ignore binary files. 
SMART_GREP_OPTIONS="$SMART_GREP_OPTIONS --binary-files=without-match" 
# Check for exclude-dir to prevent invalid options in older versions of grep. 
# Assume if we have exclude-dir, that we have exclude. 
if /bin/grep --help | /bin/grep -- --exclude-dir &>/dev/null; then 
    # Ignore version control folders. 
    for PATTERN in .cvs .git .hg .svn; do 
     SMART_GREP_OPTIONS="$SMART_GREP_OPTIONS --exclude-dir=$PATTERN" 
    done 
    # Ignore temp files. 
    for PATTERN in *.swp; do 
     SMART_GREP_OPTIONS="$SMART_GREP_OPTIONS --exclude=$PATTERN" 
    done 
fi 
# This alias may override ghostscript. That's not a problem for me. 
alias gs='grep $SMART_GREP_OPTIONS' 

我做了我的大部分grepping从vim和使用vim-searchsavvy设置类似的选项(我不使用我的别名从VIM)。