grep -q -e "^[^\-][^\-]*-[^\-][^\-]*$", por favor ayuda a explicar ^[^\-][^\-] *-[^\-][^\-]*$ ¿Qué significa la expresión regular?
El ^ entre corchetes significa exclusión, es decir, caracteres que no son estos caracteres
[^\-] en este ejemplo significa un carácter que no es '-', porque '- ' tiene el significado de indicar un rango entre corchetes, por lo que '\' se agrega delante para convertirlo en un carácter ordinario '-' (pero el carácter de escape '\' es redundante aquí: en este ejemplo, ' -' obviamente no es un rango de expresión, el autor subestimó la capacidad de comprensión del motor normal)
La expresión completa significa: el comienzo de la cadena es un carácter que no es '-', seguido de 0 a más caracteres que no sean '-', seguidos de un '-', seguido de un carácter distinto de '-', seguido de 0 a más caracteres distintos de '-', el final de la cadena
Sí, ¿no es un poco detallado?
Se puede reducir a ^[^\-] -[^\-] $
Luego se reduce aún más a ^[^- ] -[^-] $