我的雇主有一个设置 git 存储库的脚本,但这样做会添加许多不再存在的远程存储库。我想编写一行代码来修剪这些远程存储库。
看起来 的输出git fetch --all
确实包含可匹配的Could not fetch <remote>
行,但是当我grep
执行 时,它会匹配整个消息,而不仅仅是该行。我也尝试过sed
和awk
,但无济于事。
有没有简单的方法可以做到这一点?
示例输出来自git fetch --all
:
Fetching <remote>
fatal: '/path/to/remote' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
error: Could not fetch <remote>
答案1
grep
不匹配整个消息。我怀疑您尝试使用 管道连接 grep | grep
。但是,此输出是一条错误消息,输出到 stderr,并且通过使用 运算|
符,您仅在 stdout 上应用了 grep。您可以同时使用|&
stdoutgrep
和 stderr。然后,您可以使用另一个管道来 cut
提取有问题的存储库。例如:
mureinik@computer ~/src/git/remotesample (main)
$ git remote -v
remote1 http://example.com/notaremote (fetch)
remote1 http://example.com/notaremote (push)
remote2 http://example.com/alsonotaremote (fetch)
remote2 http://example.com/alsonotaremote (push)
mureinik@computer ~/src/git/remotesample (main)
$ git fetch --all |& grep '^error: Could not fetch'
error: Could not fetch remote1
error: Could not fetch remote2
mureinik@computer ~/src/git/remotesample (main)
$ git fetch --all |& grep '^error: Could not fetch' | cut -d' ' -f5
remote1
remote2