Comando para imprimir contenido antes de un símbolo (último carácter de una línea)

Comando para imprimir contenido antes de un símbolo (último carácter de una línea)

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 sedla 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'

información relacionada