¿Cómo conseguir la string entre dos puntos en bash?

Tengo varios git-Repos en dicho formatting:

product.module1.git product.module2.git ... 

Ahora solo quiero iterar sobre la list para get solo

 module1 module2 

¿Cómo puedo conseguir esto? Ya he probado ls en combinación con grep, pero no puedo eliminar la primera y la última parte de la secuencia.

Si su grep admite la opción -P :

 $ grep -oP '(?<=[.])\w+(?=[.])' file module1 module2 

(?<=[.]) es una mirada detrás. En este caso, coincide, justo después de un período.

\w+ coincide con cualquier cantidad de caracteres de palabra.

(?=[.]) es una mirada hacia adelante. En este caso, coincide con justo antes de un punto.

Un cut hará el trabajo:

 cut -d . -f2 file module1 module2 

O awk:

 awk -F. '{print $2}' file module1 module2 

En Bash, usar una matriz e IFS para tokenizar es fácil:

 var="product.module1.git" IFS="." tokens=( ${var} ) echo ${tokens[1]} # this outputs module1 
 while read -r line; do if [[ "$line" =~ \.(.*)\. ]]; then echo "${BASH_REMATCH[1]}" fi done < file 

Salida:

 module 1
 module2