2012-07-29 7 views
1

어떻게 제외 패턴을 입력하지 않고 제외 (임시 파일 및 버전 관리 디렉토리) ACK 파일을 제외 할 GREP을 얻을 것?grep이 ack와 비슷한 기능을하도록 구성하는 방법은 무엇입니까?

described here으로 GREP_OPTIONS를 사용할 수 있지만 problems here으로 실행하면 GREP_OPTIONS을 지우지 않고 grep을 사용하는 스크립트가 중단됩니다.

더 좋은 방법은 무엇입니까? 별칭? 아니면 grep을 감싸는 또 다른 스크립트?

확실한 대답은 alias grep="ack -a"이지만, 나는 ack을 사용하지 않고이 문제를 해결하는 방법에 학문적으로 관심이 있습니다.

+0

: 2.0 ACK는''-a' 및 -u' 플래그와 함께 멀리한다. 2.0의 기본값은 파일 형식에 관계없이 검색 할 모든 텍스트 파일을 선택하는 것입니다. –

+0

또한 ack은 여전히 ​​특정 디렉토리와 파일을 무시하기 때문에'ack -a'는'grep'과 동일하지 않습니다. '-a '는 "모든 파일 유형"이 아니라 "모든 파일"을 의미합니다. –

+0

는 그렙 2.20로, GREP_OPTIONS이되지 않습니다 : https://lists.gnu.org/archive/html/grep-commit/2014-09/msg00007.html – idbrii

답변

0

내 현재 솔루션 내 상호 작용하는 입력 (그리고 다른 사람의 스크립트) 내 스마트 옵션의 사용을 제한 할 때의 별명을 사용하는 것입니다.

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의 대부분을하고 (I 정력에서 내 별칭을 사용하지 않음) 설정 유사한 옵션에 vim-searchsavvy를 사용 : 이것은 내 bash_aliases에서 그렙 관련 조각입니다. 이외에도