Vamos considerar que tenho 3 arquivos:
abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip
Quero imprimir apenas os caracteres antes do último sublinhado (_)
A saída esperada é:
abc_def
abc
abc_def_ghi
Responder1
Você pode usar o bash com expansão de parâmetros:
$ foo="abc_def_ghi_3432.zip"; echo "${foo%_*}"
$ abc_def_ghi
Responder2
Com sed, você poderia tentar
sed -E 's/(.*)_.*/\1/'
por exemplo, copie e cole isso em um prompt de comando
% cat << EOF | sed -E 's/(.*)_.*/\1/'
abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip
EOF
saída
abc_def
abc
abc_def_ghi
observe que este comando deixa sed
a impressão automática do espaço do padrão no lugar, o que significa que quaisquer outras linhas que não correspondam ao padrão (ou seja, não contenham nenhum _
's, farão parte da saída. Se você não quiser isso, você poderia usar
sed -n -E 's/(.*)_.*/\1/p'