1

заменить "." [точки], но оставьте последнюю: например: .txt [может быть случайное количество точек в строке, даже ноль, мне просто нужна последняя]

$ echo 'someth.ing.something.txt' | SOMEMAGIC
someth-ки-something.txt
$

4 ответа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 и находит последнюю точку, разбивает ее на имя файла + расширение и затем заменяет все точки на дефис в имени файла.

В конце соедините это и выплюните снова.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .