Сохраните имя файла в переменной минус расширение

Файл: test.zip

Скрипт Bash

while read filename; do
zip_file=${filename}
# do stuff    
done; 

Значение, сохраненное в variable = "test"

5
задан 24 May 2015 в 17:00

3 ответа

Использовать bash расширение параметра:

zip_file="${filename}"
new_name="${zip_file%.*}"   
  • new_name будет содержать имя test если zip_file имеет test.zip

  • Если zip_file имеет test.foo.zip, new_name будет иметь test.foo, если Вы хотите только test из test.foo.zip использование:

    new_name="${zip_file%%.*}"
    
4
ответ дан 24 May 2015 в 17:00

heemayl является все еще правильным: пример:

full_path=/foo/bar/baz.zip
file_name="${full_path##*/}"
name="${file_name%.*}"
0
ответ дан 24 May 2015 в 17:00

Используя sed:

zip_file="$(<<< "${filename}" sed -r 's/^(.*)\..*/\1/')"
  • zip_file="$( [...] )": присваивается stdout из вызванной подоболочки к переменной zip_file как строка
  • <<< "${filename}" [...]: перенаправляет содержание переменной ${filename} к вызванной подоболочке stdin как строка
  • sed -r 's/^(.*)\./\1/': редактирует содержание вызванной подоболочки stdin расширенные регулярные выражения использования, путем соответствия целой строке и замены его подстрокой, соответствующей каждому символу от запуска до последнего Редактирования точки

: видя Ваш комментарий к ответу heemayl, для замены подстрокой, соответствующей каждому символу от последней наклонной черты до последней точки:

zip_file="$(<<< "${filename}" sed -r 's/^.*\/(.*)\..*/\1/')"
0
ответ дан 24 May 2015 в 17:00

Другие вопросы по тегам:

Похожие вопросы: