多くの場合、git プロジェクトで複数の文字列/パターンを含む行を検索する必要があります。
git grep -i -e str1 --and -e str2 --and -e str3 -- *strings*txt
これはすぐに退屈になります。
これを行うより良い方法はありますか?
多くの場合、git プロジェクトで複数の文字列/パターンを含む行を検索する必要があります。
git grep -i -e str1 --and -e str2 --and -e str3 -- *strings*txt
これはすぐに退屈になります。
これを行うより良い方法はありますか?
git と grep を組み合わせたソリューション:
git grep --files-with-matches "str1" | xargs grep "str2"
-E
拡張正規表現and |
(or)を使用するのが最も簡単だと思います。
git grep -E 'str1|str2|str3' -- *strings*txt
使用しているオペレーティング システムについては言及していませんが、Linux のようなものであれば、「ラッパー」スクリプトを作成できます。のような名前のシェル スクリプトを作成git-grep1
し、$PATH にあるディレクトリに配置して、git が見つけられるようにします。次にgit grep1 param1 param2...
、スクリプトが組み込みの git コマンドであるかのように入力できます。
開始するための簡単な例を次に示します。
# Example use: find C source files that contain "pattern" or "pat*rn"
# $ git grep1 '*.c' pattern 'pat*rn'
# Ensure we have at least 2 params: a file name and a pattern.
[ -n "$2" ] || { echo "usage: $0 FILE_SPEC PATTERN..." >&2; exit 1; }
file_spec="$1" # First argument is the file spec.
shift
pattern="-e $1" # Next argument is the first pattern.
shift
# Append all remaining patterns, separating them with '--and'.
while [ -n "$1" ]; do
pattern="$pattern --and -e $1"
shift
done
# Find the patterns in the files.
git grep -i "$pattern" -- "$file_spec"
$file_spec
たとえば、シェルによる展開を防ぐために、パターンと各パターンを単一引用符で囲むなど、おそらくこれを試す必要があります。