[英]Sed: replace last dot
如何替换最后一个匹配dot
?
例如,我想将test.jpg更改为test.th.jpg
我尝试过的
echo "test.jpg" | sed 's@[^\.]*$@\.th.@g'
这应该工作:
$ 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
替换第一个捕获组的内容:)
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
您也可以使用awk
,在“ th”之前加上前缀。 到最后一个领域
$ awk 'BEGIN{FS=OFS="."}$NF="th."$NF' <<< "test.jpg"
test.th.jpg
使用纯bash
$ str="test.abc.jpg"
$ echo ${str%.*}.th.jpg
test.abc.th.jpg
如果您的系统上有Ruby
echo test.jpg | ruby -e 'x=gets.split(".");x.insert(-2,"th"); puts x.join(".")'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.