substituindo ponto em string, mas deixando o último

1

substitua o "." [pontos], mas deixe o último: por exemplo: .txt [pode haver um número aleatório de pontos na cadeia, até zero, eu preciso apenas do último]]
$ echo 'someth.ing.something.txt' | SOMEMAGIC
someth-ing-something.txt
$

    
por LanceBaynes 17.01.2011 / 16:50

4 respostas

2

Experimente:

echo 'someth.ing.something.txt' | sed 's/\(.*\)\.\([^.]*\)$/\n/;s/\./-/g;s/\n/./g'
    
por 17.01.2011 / 17:10
1
#!/bin/bash

F=$1
tail=${F#*.}
head=${F%.*}
removed_dots=$(echo $head| tr "." "-")
mv -iv $1 "$removed_dots.$tail"
    
por 17.01.2011 / 17:22
0

Experimente:

echo 'someth.ing.something.txt' | sed 's/\./-/g;s/\(.*\)-\([^-]*\)$/./'
    
por 17.01.2011 / 17:05
0

Tenho certeza que existe uma maneira melhor (regex), mas você poderia escrever um script (python / perl) que pega leituras de stdin e encontra o último ponto, divide em filename + extension e então substitui todos os pontos por traços no nome do arquivo.

No final, concatene-o e cuspa-o novamente.

    
por 17.01.2011 / 17:07

Tags