替换“。” [点],但保留最后一个:例如:.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 读取并找到最后一个点,将其拆分为文件名 + 扩展名,然后将文件名中的所有点替换为破折号。
最后将其连接起来并再次吐出。