假设我有一个字符串文件名aa.bb.cc.xx.txt
我想删除之间的第一个内容。和。 (。删除.xx)在.txt之前有aa.bb.cc.txt
。
我不想使用rev,cut和rev,因为它使用3个命令
echo 'aa.bb.cc.xx.rpm' |rev | cut -d '.' --complement -s -f 2 |rev
使用bash还有更好的解决方案吗? 感谢
答案 0 :(得分: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.
。两个运营商都需要删除用于分隔匹配前缀或后缀的.
,这就是您需要在两次扩展之间明确添加它的原因。
答案 1 :(得分:0)
您可以按如下方式使用sed
:
$ echo "aa.bb.cc.xx.txt" | sed "s/.[a-zA-Z].txt/txt/g"
aa.bb.cc.txt
答案 2 :(得分:0)
如果您想要适用于任何扩展程序的常规sed -e '/?!(rpms$)/{N;s/\n//}' filename
解决方案,您可以执行以下操作:
sed