удалить из строки "89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar.gz" только ".tar.gz" - PullRequest
0 голосов
/ 26 апреля 2018

удалить из строки 89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar.gz только часть .tar.gz, и результат должен быть 89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz. Также могут возникнуть некоторые файлы с таким расширением: 91xhq8vkxlkdfpmfg566qahrwkh01c7n0scpdsr4p4vf6.tbz.tar.bz2 и другие с двойным расширением tar.tbz tar.zip и так далее ...

В случае .tar.zip результат должен быть nomearchivio.tar, в случае 91xhq8vkxlkdfpmfg566qahrwkh01c7n0scpdsr4p4vf6.tbz.tar.bz2 должен быть 91xhq8vkxlkdfpmfg566qahrwkh01c7n0scpdsr4p4vf6.tbz

Я использую это:

nameFile= "89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar.gz"
name=${nameFile%.*}

и результат:

echo $name
89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar

Вы можете мне помочь? Спасибо

P.S. обратите внимание, что в имени файла есть и другие точки.

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Поскольку вы точно знаете, что хотите удалить, просто напишите это полностью:

name=${nameFile%.tar.gz}

Или удалить последние два "расширения" .*.*:

name=${nameFile%.*.*}
0 голосов
/ 26 апреля 2018

Вы можете попробовать awk, например:

echo 89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz.tar.gz | awk -F '\.tgz' '{print $1".tgz"}'

Будет выведено:

89dde7.rqsnhq34h.fmu8s1vn0i94hl.tgz

Для других файлов:

echo "01c7n0scpdsr4p4vf6.tbz.tar.bz2" |  awk -F '\.tbz' '{print $1".tbz"}'

Будет выведено:

01c7n0scpdsr4p4vf6.tbz

В этом случае awk использует в качестве разделителя -F '\.tbz' ваш шаблон, .tgz или tbz, а затем печатает все найденные слева элементы + желаемое расширение.

0 голосов
/ 26 апреля 2018

Вы можете использовать sed и удалить последние 7 символов

echo $nameFile |sed 's/.\{7\}$//'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...