Comando para imprimir o conteúdo antes de um símbolo (último caractere em uma linha)

2

Vamos considerar que eu tenho 3 arquivos:

abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip

Eu quero imprimir apenas os caracteres antes do último sublinhado (_)

A saída esperada é:

abc_def
abc
abc_def_ghi
    
por user1825696 08.06.2016 / 11:41

2 respostas

0

Com sed, você pode tentar

sed -E 's/(.*)_.*//'

exemplo, copie e cole em um prompt de comando

% cat << EOF | sed -E 's/(.*)_.*//'
abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip
EOF

saída

abc_def
abc
abc_def_ghi

note, este comando deixa a impressão automática de sed do espaço de padrão no lugar, o que significa que quaisquer outras linhas que não correspondam ao padrão (ou seja, não contenham _ , farão parte Se você não quiser, você pode usar

sed -n -E 's/(.*)_.*//p'
    
por 08.06.2016 / 12:03
1

Você pode usar o bash com a expansão de parâmetros:

$ foo="abc_def_ghi_3432.zip"; echo "${foo%_*}"
$ abc_def_ghi
    
por 08.06.2016 / 12:07