LINUX.ORG.RU
решено ФорумTalks

Получить расширение файла (null, если его нет)

 


0

1

Всем привет. Допустим, у файла имя test. Если я попробую взять его расширение через echo test | awk -F. '{print $NF}', то получу test. Если попробую file=test; echo ${file##*.} то получу опять test. Как взять расширение таким образом, чтобы иметь null, если его нет?

★★

<awk какой-то, вперся он тебе>

cut -d. -f-1 --complement и if на наличие точки вообще?

t184256 ★★★★★
()

А если у файла расширение null?

hateyoufeel ★★★★★
()
#!/bin/bash
RSLT=`echo "$1" | sed 's/^.*\.//'`
if [ "$RSLT" == "$1" ]; then
        RSLT=""
fi
echo $RSLT
saahriktu ★★★★★
()
export FILENAME=test.qqq
python -c 'from __future__ import print_function; import os; filename=os.environ["FILENAME"]; filenamelist=filename.split("."); print(filenamelist[-1]) if (len(filenamelist) > 1) else print()'
Black_Shadow ★★★★★
()

однострочник на perl

perl -e '$_ = @ARGV[0]; print "$1\n" if /.+[.]([^.]+)/'  test.qq.aaa.cq
George
()
Ответ на: комментарий от justAmoment

Тоже самое, только для большей наглядности вывод длины переменной

$ext=`echo test.xx | sed -n 's_.*\.\(.*\)_\1_p'`; echo "ext="$ext, "len="${#ext}
ext=xx, len=2

$ ext=`echo test.xx.yyy | sed -n 's_.*\.\(.*\)_\1_p'`; echo "ext="$ext, "len="${#ext}
ext=yyy, len=3

$ ext=`echo test | sed -n 's_.*\.\(.*\)_\1_p'`; echo "ext="$ext, "len="${#ext}
ext=, len=0

justAmoment ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.