“Tuning” tr e expressão sed

3

Eu tenho o arquivo MD5 que lista nome_do_arquivo e soma MD5 da seguinte maneira:

MD5 (file14n0001.xml.gz) = 04eb2524d271077ec8f1a0021779b171
MD5 (file14n0002.xml.gz) = 07e2b29645e9211cce9daf1ae27e7b99
MD5 (file14n0003.xml.gz) = c31cca187a32743441868822b02d83aa

Eu preciso analisar apenas o nome do arquivo e a soma MD5; por exemplo, a saída desejada é:

file14n0001.xml.gz 04eb2524d271077ec8f1a0021779b171
file14n0002.xml.gz 07e2b29645e9211cce9daf1ae27e7b99
file14n0003.xml.gz c31cca187a32743441868822b02d83aa

Minha expressão tr (aumentada com sed) é:

tr -d 'MD5() ' | sed 's/=/ /g'

Mas tr parte da expressão também exclui todos os 5s em linhas, então a saída é

file14n0001.xml.gz 04eb224d271077ec8f1a0021779b171
file14n0002.xml.gz 07e2b2964e9211cce9daf1ae27e7b99
file14n0003.xml.gz c31cca187a32743441868822b02d83aa

Por gentileza, peço uma indicação de como proceder.

    
por Andrej 17.07.2014 / 18:24

4 respostas

3

Comando:

sed -r 's/MD5 .(.*). = (.*)/ /' filename

Saída:

file14n0001.xml.gz 04eb2524d271077ec8f1a0021779b171
file14n0002.xml.gz 07e2b29645e9211cce9daf1ae27e7b99
file14n0003.xml.gz c31cca187a32743441868822b02d83aa
    
por 17.07.2014 / 18:43
3

Não use tr , apenas use sed .

sed -r -e 's/^MD5 [(](.+)[)] = ([0-9a-f]+)$/ /g'
    
por 17.07.2014 / 18:37
1

Para arquivos pequenos, uma solução pura-bash é uma opção

while IFS='() ' read -r _ file_name _ sum; 
do 
   printf '%s %s\n' "$file_name" "$sum"; 
done < file
file14n0001.xml.gz 04eb2524d271077ec8f1a0021779b171
file14n0002.xml.gz 07e2b29645e9211cce9daf1ae27e7b99
file14n0003.xml.gz c31cca187a32743441868822b02d83aa
    
por 17.07.2014 / 18:51
1

Suponha que o número de colunas seja fixo. awk e sed seriam úteis.

awk '{print $2,$4}' file.txt  | sed 's@[()]@@g'

foo@bar(~) $ awk '{print $2,$4}' file.txt  | sed 's@[()]@@g'
file14n0001.xml.gz 04eb2524d271077ec8f1a0021779b171
file14n0002.xml.gz 07e2b29645e9211cce9daf1ae27e7b99
file14n0003.xml.gz c31cca187a32743441868822b02d83aa

resumo de classificação: obtenha as colunas que deseja com awk e tire os () símbolos

    
por 16.10.2017 / 12:29

Tags