Linux 从字符串中删除“;89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar.gz”的;只有那一个;。tar.gz“;
从字符串Linux 从字符串中删除“;89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar.gz”的;只有那一个;。tar.gz“;,linux,bash,shell,Linux,Bash,Shell,从字符串89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar.gz中仅删除.tar.gz部分,结果应为89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz。 在具有此扩展名的某些文件中也可能发生这种情况: 91xhq8vkxlkdfpmfg566qahrwkh01c7n0scpdsr4p4vf6.tbz.tar.bz2和其他具有双扩展名tar.tbz tar.zip的文件 在case.tar.zip中,结果必须是nomearchivio.tar在91x
89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar.gz
中仅删除.tar.gz
部分,结果应为89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz
。
在具有此扩展名的某些文件中也可能发生这种情况:
91xhq8vkxlkdfpmfg566qahrwkh01c7n0scpdsr4p4vf6.tbz.tar.bz2
和其他具有双扩展名tar.tbz tar.zip的文件
在case.tar.zip中,结果必须是nomearchivio.tar
在91xhq8vkxlkdfpmfg566qahrwkh01c7n0scpdsr4p4vf6.tbz.tar.bz2中,结果必须是91xhq8vkxlfpmfg566qahrwkh01c7n0scpdsr4pvf6.tbz
我用这个:
nameFile= "89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar.gz"
name=${nameFile%.*}
结果是:
echo $name
89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar
你能帮我吗?谢谢
注意,文件名中还有其他点。您可以使用sed
删除最后7个字符
echo$nameFile | sed's/\{7\}$/'
既然您确切知道要删除的内容,只需完整编写即可:
name=${nameFile%.tar.gz}
或者删除最后两个“扩展”:
name=${nameFile%.*.*}
您可以尝试awk
,例如:
echo 89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar.gz | awk -F '\.tgz' '{print $1".tgz"}'
它将输出:
89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz
01c7n0scpdsr4p4vf6.tbz
对于其他文件:
echo "01c7n0scpdsr4p4vf6.tbz.tar.bz2" | awk -F '\.tbz' '{print $1".tbz"}'
它将输出:
89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz
01c7n0scpdsr4p4vf6.tbz
在本例中,awk
用作模式的分隔符-F'\.tbz'
,.tgz
或tbz
然后打印左侧找到的所有项目+所需的扩展名。我无法给出此指示,因为我有其他扩展名不同的文件,例如:-91xhq8vkxlkdfpmfg566qahrwkh01c7n0scpdsr4p4vf6.tbz.tar.bz2-m3mcsm8q1g.tgz。那么,一般规则是什么?请更新您的问题以澄清。我必须在变量名中分配您的命令,因为如果我发现其他文件的扩展名为:“91xhq8vkxlkdfpmfg566qahrwkh01c7n0scpdsr4p4vf6.tbz.tar.bz2”,所以我必须检查。我可以将您的命令分配给变量name=${nameFile | sed's/\{7\}$/'}??