你如何配置grep以更像ack?

时间:2012-07-29 22:23:55

标签: grep ack

如何在不键入排除模式的情况下获取grep来排除ack排除的文件(临时文件和版本控制目录)?

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

更好的方法是什么?别名?或者另一个包装grep的脚本?

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

1 个答案:

答案 0 :(得分: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'

我从vim中完成了大部分内容,并使用vim-searchsavvy设置了类似的选项(我不会使用vim中的别名)。