如何从 grep 输出中获取提交
How to grab commit from grep output
假设我在 git 存储库中调用以下命令:
git log --oneline -n 10 | grep pattern
它给了我以下输出:
c95383f asdfasdf pattern
3e34762 asdfasdfsd pattern
我如何才能只从第二行获取提交哈希,以便我可以将其通过管道传输到另一个命令中?
这个可以考虑awk
:
git log --oneline -n 10 | awk '/pattern/ {print }'
其中 /pattern/
在一行中匹配 pattern
,而 {print }
打印匹配行的第一个字段。
我的朋友刚刚给我看了这个:
git log --oneline -n 10 | grep pattern | awk 'END{print }'
但我很想知道是否有人有任何不同的解决方案。
对于打印的提交(在本例中为 10),打印匹配 pattern
:
的 最旧提交的哈希
git log --oneline -n 10 |
awk '[=10=] ~ /pattern/ {hash = } END {print hash}'
相同,但第 N 个最新:
git log --oneline -n 10 |
awk '[=11=] ~ /pattern/ && ++c==N {print }'
(使用 1 表示最新的,或使用 2 表示第二个最新的,等等,在此示例中 N 必须 <= 10)
打印第 N 个最新提交的散列(无模式):
git log --oneline -n N |
awk 'END {print }'
或
git log --oneline |
awk 'NR==N {print }'
请记住,git log
有选项 --since
、--after
、--until
和 --before
,它们将日期作为输入。
假设我在 git 存储库中调用以下命令:
git log --oneline -n 10 | grep pattern
它给了我以下输出:
c95383f asdfasdf pattern
3e34762 asdfasdfsd pattern
我如何才能只从第二行获取提交哈希,以便我可以将其通过管道传输到另一个命令中?
这个可以考虑awk
:
git log --oneline -n 10 | awk '/pattern/ {print }'
其中 /pattern/
在一行中匹配 pattern
,而 {print }
打印匹配行的第一个字段。
我的朋友刚刚给我看了这个:
git log --oneline -n 10 | grep pattern | awk 'END{print }'
但我很想知道是否有人有任何不同的解决方案。
对于打印的提交(在本例中为 10),打印匹配 pattern
:
git log --oneline -n 10 |
awk '[=10=] ~ /pattern/ {hash = } END {print hash}'
相同,但第 N 个最新:
git log --oneline -n 10 |
awk '[=11=] ~ /pattern/ && ++c==N {print }'
(使用 1 表示最新的,或使用 2 表示第二个最新的,等等,在此示例中 N 必须 <= 10)
打印第 N 个最新提交的散列(无模式):
git log --oneline -n N |
awk 'END {print }'
或
git log --oneline |
awk 'NR==N {print }'
请记住,git log
有选项 --since
、--after
、--until
和 --before
,它们将日期作为输入。