4

svn の特別なフォルダーを完全に除外して、svn 作業コピー内のすべての cpp/h ファイルで "foo" を検索する必要があります。GNU grepの正確なコマンドは何ですか?

4

6 に答える 6

9

この目的でackを使用します。これは grep に似ていますが、ソース管理ディレクトリを除外する方法を自動的に認識します (他の便利なものの中でも特に)。

于 2008-10-16T10:50:15.983 に答える
7

grep -ir --exclude-dir=.svn foo *

作業ディレクトリで行います。検索で大文字と小文字を区別する場合は、「i」を省略します。

.cpp および .h ファイルのみをチェックする場合は、

grep -ir --include={ .cpp, .h} --exclude-dir=.svn foo *

于 2008-10-16T10:54:08.970 に答える
3

少し話題から外れます:

追跡されていない (つまり、バージョン管理されていない) ファイルが多数ある作業コピーがあり、ソース管理されたファイルのみを検索したい場合は、次のようにします。

svn ls -R | xargs -d '\n' grep <string-to-search-for>
于 2008-10-16T11:11:38.843 に答える
1

これはRTFMです。「man grep」と「/exclude」と入力すると、次のようになりました。

--exclude=GLOB ベース名が GLOB に一致するファイルをスキップします (ワイルドカード マッチングを使用)。ファイル名グロブでは、*、?、および [...] をワイルドカードとして使用でき、\ を使用してワイルドカードまたはバックスラッシュ文字を文字どおりに引用できます。

--exclude-from=FILE FILE から読み取ったファイル名グロブのいずれかに一致するベース名を持つファイルをスキップします (--exclude で説明されているワイルドカード マッチングを使用)。

--exclude-dir=DIR パターン DIR に一致するディレクトリを再帰的検索から除外します。

于 2008-10-16T10:50:57.840 に答える
1

vimこれらの bash エイリアスを使用して、svn ツリーのコンテンツとファイルを grep します... GUI ベースの IDE ではなく、コマンドラインから検索する (およびコーディングに使用する) 方が高速で快適です。

s () {
    local PATTERN=$1
    local COLOR=$2
    shift; shift;
    local MOREFLAGS=$*

    if  ! test -n "$COLOR" ; then
        # is stdout connected to terminal?
        if test -t 1; then
            COLOR=always
        else
            COLOR=none
        fi
    fi

    find -L . \
        -not \( -name .svn -a -prune \) \
        -not \( -name templates_c -a -prune \) \
        -not \( -name log -a -prune \) \
        -not \( -name logs -a -prune \) \
        -type f \
        -not -name \*.swp \
        -not -name \*.swo \
        -not -name \*.obj \
        -not -name \*.map \
        -not -name access.log \
        -not -name \*.gif \
        -not -name \*.jpg \
        -not -name \*.png \
        -not -name \*.sql \
        -not -name \*.js \
        -exec grep -iIHn -E --color=${COLOR} ${MOREFLAGS} -e "${PATTERN}" \{\} \;
}

# s foo | less
sl () {
    local PATTERN=$*
    s "$PATTERN" always | less
}

# like s but only lists the files that match
smatch () {
    local PATTERN=$1
    s $PATTERN always -l
}

# recursive search (filenames) - find file
f () {
    find -L . -not \( -name .svn -a -prune \) \( -type f -or -type d \) -name "$1"
}
于 2009-09-02T19:50:36.837 に答える
1

このスクリプトを書き、.bashrc に追加しました。grep、find、locate から SVN ディレクトリを自動的に除外します。

于 2008-10-16T11:28:18.217 に答える