Comando:
sed -r 's/MD5 .(.*). = (.*)/ /' filename
Saída:
file14n0001.xml.gz 04eb2524d271077ec8f1a0021779b171
file14n0002.xml.gz 07e2b29645e9211cce9daf1ae27e7b99
file14n0003.xml.gz c31cca187a32743441868822b02d83aa
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.
Não use tr
, apenas use sed
.
sed -r -e 's/^MD5 [(](.+)[)] = ([0-9a-f]+)$/ /g'
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
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