我经常需要在git项目中搜索包含多个字符串/模式的行,例如
git grep -i -e str1 --and -e str2 --and -e str3 -- *strings*txt
这很快就会变得乏味。
有更好的方法吗?
答案 0 :(得分:2)
你没有提到你正在使用的操作系统,但如果它是类似Linux的,你可以编写一个"包装器"脚本。创建一个名为git-grep1
的shell脚本,并将其放在$ 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
和每个模式括在单引号中以防止shell扩展。
答案 1 :(得分:2)
git和grep组合解决方案:
git grep --files-with-matches "str1" | xargs grep "str2"
答案 2 :(得分:1)
我发现使用扩展正则表达式-E
和|
(或)是最简单的。
git grep -E 'str1|str2|str3' -- *strings*txt
答案 3 :(得分:0)
如果您知道字符串的相对顺序,那么您可以执行
git grep str1.*str2.*str3 -- *strings*txt