Digamos que llamo al siguiente comando en un repositorio de git:
git log --oneline -n 10 | grep patterny me da el siguiente resultado:
c95383f asdfasdf pattern 3e34762 asdfasdfsd pattern¿Cómo puedo tomar solo el hash de confirmación de la segunda línea para poder canalizarlo a otro comando?
Puedes considerar awk para esto:
git log --oneline -n 10 | awk '/pattern/ {print $1}' Donde /pattern/ coincide con pattern en una línea mientras que {print $1} imprime el primer campo de una línea coincidente.
Mi amigo me acaba de mostrar esto:
git log --oneline -n 10 | grep pattern | awk 'END{print $1}'Pero estoy interesado en ver si alguien tiene alguna solución diferente.
Para las confirmaciones impresas (diez en este caso), imprima el hash del pattern coincidente de confirmación más antiguo :
git log --oneline -n 10 | awk '$0 ~ /pattern/ {hash = $1} END {print hash}'Lo mismo, pero para el N- ésimo más nuevo :
git log --oneline -n 10 | awk '$0 ~ /pattern/ && ++c==N {print $1}'(use 1 para el más nuevo, o 2 para el segundo más nuevo, etc. N debe ser <= 10 en este ejemplo)
Imprima el hash de la enésima confirmación más reciente (sin patrón) :
git log --oneline -n N | awk 'END {print $1}'O
git log --oneline | awk 'NR==N {print $1}' Recuerde que git log tiene las opciones --since , --after , --until y --before , que toman una fecha como entrada.