如何替换最后一个匹配的dot
?
例如,我想将test.jpg更改为test.th.jpg
我尝试了什么:
echo "test.jpg" | sed 's@[^\.]*$@\.th.@g'
答案 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(".")'