заменить "." [точки], но оставьте последнюю: например: .txt [может быть случайное количество точек в строке, даже ноль, мне просто нужна последняя]
$ echo 'someth.ing.something.txt' | SOMEMAGIC
someth-ки-something.txt
$
1
4 ответа
2
Попробуйте это:
echo 'someth.ing.something.txt' | sed 's/\(.*\)\.\([^.]*\)$/\1\n\2/;s/\./-/g;s/\n/./g'
1
#!/bin/bash
F=$1
tail=${F#*.}
head=${F%.*}
removed_dots=$(echo $head| tr "." "-")
mv -iv $1 "$removed_dots.$tail"
0
Попробуйте с:
echo 'someth.ing.something.txt' | sed 's/\./-/g;s/\(.*\)-\([^-]*\)$/\1.\2/'
0
Я уверен, что есть лучший (regex) способ, но вы могли бы написать скрипт (python/perl), который берет чтение из stdin и находит последнюю точку, разбивает ее на имя файла + расширение и затем заменяет все точки на дефис в имени файла.
В конце соедините это и выплюните снова.