Sed:替换最后一个点

时间:2014-01-09 23:17:22

标签: regex sed

如何替换最后一个匹配的dot

例如,我想将test.jpg更改为test.th.jpg

我尝试了什么:

echo "test.jpg" | sed 's@[^\.]*$@\.th.@g'

5 个答案:

答案 0 :(得分:5)

这应该有效:

$ echo "test.jpg" | sed 's/\.\([^.]*\)$/.th.\1/'

它给出了:

test.th.jpg

说明:

\.    literal dot
\(    start capturing group
[^.]  any character except dot
*     zero or more
\)    close capturing group
$     end of line

在替换\1中替换第一个捕获组的内容:)

答案 1 :(得分:2)

kent$  sed 's/[^.]*$/th.&/' <<<"test.jpg"    
test.th.jpg

kent$  sed 's/.*\./&th./' <<<"test.jpg" 
test.th.jpg

kent$  awk -F. -v OFS="." '$NF="th."$NF' <<< "test.jpg"
test.th.jpg

答案 2 :(得分:1)

你也可以使用awk,加上“th”。到最后一个字段

$ awk 'BEGIN{FS=OFS="."}$NF="th."$NF' <<< "test.jpg"
test.th.jpg

答案 3 :(得分:1)

使用纯bash

$ str="test.abc.jpg"

$ echo ${str%.*}.th.jpg
test.abc.th.jpg

答案 4 :(得分:0)

如果您的系统上有Ruby

echo test.jpg | ruby -e 'x=gets.split(".");x.insert(-2,"th"); puts x.join(".")'