16

我经常需要在 git 项目中搜索包含多个字符串/模式的行,例如

git grep -i -e str1 --and -e str2 --and -e str3 -- *strings*txt

这很快就会变得乏味。

有一个更好的方法吗?

4

4 回答 4

4

一个 git 和 grep 组合的解决方案:

git grep --files-with-matches "str1"  | xargs grep "str2"
于 2020-04-16T10:38:33.297 回答
4

-E我发现使用扩展正则表达式和|(或)最容易。

git grep -E 'str1|str2|str3' -- *strings*txt
于 2019-10-18T08:16:25.403 回答
2

你没有提到你正在使用什么操作系统,但如果它是 linux-like,你可以编写一个“包装器”脚本。创建一个名为 like 的 shell 脚本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_specand 每个模式括在单引号中以防止 shell 扩展。

于 2013-07-10T01:01:32.927 回答
0

如果你知道字符串的相对顺序,那么你可以做一个

git grep str1.*str2.*str3 -- *strings*txt
于 2013-07-16T01:46:54.673 回答