2016-03-07 38 views
0

说我有一个字符串文件名aa.bb.cc.xx.txt 我想删除之间的第一个内容。和。 (删除.xx)在.txt之前有aa.bb.cc.txt在第一次从右到左删除模式在文件名称在打击

我不想用转,切转,因为这使用3个命令

echo 'aa.bb.cc.xx.rpm' |rev | cut -d '.' --complement -s -f 2 |rev 

是否存在被使用bash任何更好的解决方案? 感谢

回答

1

如果你知道有.txt文件结束,你可以删除为好,然后把它放回。

$ oldname=aa.bb.cc.xx.txt 
$ echo "${oldname%.*.txt}.txt" 
aa.bb.cc.txt 

%.*.txt去除最短字符串匹配的图案.*.txt(在这种情况下,.xx.txt)。

如果扩展名可以是任意字符串,您可以通过删除所有但扩展名为作为前缀,然后恢复它来保存它。

$ echo "${oldname%.*.*}.${oldname##*.}" 

##*.消除在.结束最长前缀匹配,在这种情况下aa.bb.cc.xx.。两个运营商都要求删除分隔匹配的前缀或后缀的.,这就是为什么您需要在两次扩展之间明确地添加它。

0

您可以使用sed如下:

$ echo "aa.bb.cc.xx.txt" | sed "s/.[a-zA-Z].txt/txt/g" 
aa.bb.cc.txt 
0

如果你想要一个普通sed的解决方案,在任何扩建工程,你可以这样做:

$ echo 'aa.bb.cc.xx.rpm' | sed 's/[^.]*\.\([^.]*\)$/\1/' 
aa.bb.cc.rpm 
相关问题