2014-09-30 2 views
0

Предположим, что вырезать подстроку в моем сценарии оболочки. Я пытаюсь следующим образом:Строка в скрипте оболочки

fileName="Test_VSS_TT.csv.old" 

здесь я хочу, чтобы удалить строку «.csv.old» и мой

test=${fileName%.*} 

но портиться ошибка замещения.

+1

Пробовал ли вы 'test = $ {filename %%. *}'? '%%' возвращает самый длинный шаблон соответствия. – Fazlin

+0

Но команда, которую вы пытались удалить, удалила '.old' из вашей строки и привела к' TEST_VSS_TT.csv' вместо того, чтобы выбросить ошибку. Вы дважды проверили вашу команду? , – Ram

+0

Моя первая проблема по-прежнему вызывает ту же ошибку даже с %%. Моя система - Solaris sparc. – CrazyC

ответ

0

вы ищете test=${filename%%.*}

ДоПа для расширения параметров в Баше here и в Zsh here

%.* будет соответствовать первому .* модели, в то время как %%.* будет соответствовать самому длинному

[ править]

если sed, вы можете попробовать что-то вроде этого: echo "filename.txt.bin" | sed "s/\..*//g", который дает filename

+0

@CrazyC: какую оболочку/версию вы используете? –

+0

Bash версия is 3.2.51 (1) -release – CrazyC

+0

странно. Можете ли вы отправить полную копию команды и сообщение об ошибке из интерактивной оболочки? –

0

Здесь вы идете,

$ echo $f 
Test_VSS_TT.csv.old 
$ test=${f%%.*} 
$ echo $test 
Test_VSS_TT 

%% будет делать длинный матч. Таким образом, он совпадает с первой точкой до последней, а затем удаляет совпадающие символы.

+0

Моя первая проблема по-прежнему вызывает ту же ошибку даже с %%. Моя система Solaris sparc – CrazyC

0

Если вы намерены извлечь имя файла без расширения, то как насчет этого?

$ echo ${fileName}    
Test_VSS_TT.csv.old 
$ test=`echo ${fileName} |cut -d '.' -f1` 
$ echo $test 
Test_VSS_TT 
0

echo "Test_VSS_TT.csv.old" | awk -F "." '{print $ 1}'

+0

Простейший способ, сохранить результат в переменной и использовать его при необходимости –

+0

awk: ошибка синтаксиса рядом с линией 1 awk: спасение рядом с линией 1 – CrazyC

Смежные вопросы