Strings - Extrair versão do arquivo recursivo

3

Eu tenho usado strings para extrair e comparar versões de arquivos entre diretórios.

Eu não pareço ser capaz de fazer isso de forma recursiva.

O método que tenho usado por arquivo é:

strings -e l FILENAME.exe | sed -e :a -e '/FileVersion$/N; s/FileVersion\n/FileVersion /; ta' | grep FileVersion | cut -d ' ' -f 2

Removendo o nome do arquivo e substituindo por * works. Mas eu só recebo a versão do arquivo e nenhum nome de arquivo. Incluindo a -F me dá o nome do arquivo para as seqüências de caracteres.

Mas não entendo como posso formatar o Sed / Grep para coletar apenas o nome do arquivo e o número da versão.

    
por Dave Hamilton 11.03.2016 / 17:44

3 respostas

1

Este foi apenas um mau entendimento com o uso de corte e sed.

Aperte levemente o revestimento:

strings -f -e l *.exe | sed -e :a -e '/FileVersion$/N; s/FileVersion\n/FileVersion /; ta' | grep FileVersion | sed 's/.*FileVersion//'

Portanto, string usa -f para nome do arquivo, -e para informações necessárias sobre o arquivo.

sed é usado para retirar e deixar a Fileversão

Em seguida, grep para localizar essa informação para a tela

em seguida, um último sed para remover o conteúdo antes do Fileversion (essa não é uma maneira correta de fazer isso, acho complicado entender os padrões do sed)

sed 's/.*FileVersion//'

Se alguém quiser postar a formatação correta para o sed, atualizarei isso felizmente. Unfortually os padrões e a compreensão do sed não se afundam apropriadamente.

    
por 11.03.2016 / 18:00
1

Parece que você deseja imprimir as linhas seguindo as que terminam em FileVersion , por isso deve ser apenas uma questão de:

strings -f -e l -- *.exe | sed -n '/FileVersion$/{n;p;}'
    
por 11.03.2016 / 18:20
1

Você pode fazer algo como:

 strings -e l -f FILENAME.exe | sed -n -e :a -e '/FileVersion$/,/.*/{/FileVersion$/d;/.*/p}'

Isso terá sed não imprimir qualquer linha "-n", exceto a linha que você diz com p. Em seguida, você diz para encontrar uma linha que termine com FileVersion e o próximo padrão, já que o padrão final é. * Ele corresponderá à próxima linha :). Você então diz para deletar a linha FileVersion e imprimir o resto que conterá sua versão:).

    
por 11.03.2016 / 18:18