替换字符串中的点,但保留最后一个点

替换字符串中的点,但保留最后一个点

替换“。” [点],但保留最后一个:例如:.txt [字符串中可能有随机数量的点,甚至零,我只需要最后一个]

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

答案1

尝试一下:

echo 'someth.ing.something.txt' | sed 's/\(.*\)\.\([^.]*\)$/\1\n\2/;s/\./-/g;s/\n/./g'

答案2

#!/bin/bash

F=$1
tail=${F#*.}
head=${F%.*}
removed_dots=$(echo $head| tr "." "-")
mv -iv $1 "$removed_dots.$tail"

答案3

尝试:

echo 'someth.ing.something.txt' | sed 's/\./-/g;s/\(.*\)-\([^-]*\)$/\1.\2/'

答案4

我确信有更好的(正则表达式)方法,但你可以编写一个脚本(python/perl),从 stdin 读取并找到最后一个点,将其拆分为文件名 + 扩展名,然后将文件名中的所有点替换为破折号。

最后将其连接起来并再次吐出。

相关内容