Consideremos que tengo 3 archivos:
abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip
Quiero imprimir solo los caracteres antes del último guión bajo (_)
El resultado esperado es:
abc_def
abc
abc_def_ghi
Respuesta1
Puedes usar bash con expansión de parámetros:
$ foo="abc_def_ghi_3432.zip"; echo "${foo%_*}"
$ abc_def_ghi
Respuesta2
Con sed, podrías intentar
sed -E 's/(.*)_.*/\1/'
Por ejemplo, copie y pegue esto en un símbolo del sistema
% cat << EOF | sed -E 's/(.*)_.*/\1/'
abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip
EOF
producción
abc_def
abc
abc_def_ghi
Tenga en cuenta que este comando deja sed
la impresión automática del espacio del patrón en su lugar, lo que significa que cualquier otra línea que no coincida con el patrón (es decir, que no contenga ninguno _
, será parte de la salida. Si no lo hace Si quieres estos, podrías usarlos.
sed -n -E 's/(.*)_.*/\1/p'