2013-11-25 6 views
0

Как получить строку, которая хранится между некоторыми символами?Получить дополнительную строку между некоторыми символами

У меня есть такая строка, как /some/path/to/project/HelloWorld.xcodeproj. И я хочу получить результат в переменной как HelloWorld. Можно ли делать с оболочкой?

ответ

3

При этом, например:

Имя файла:

$ filename=$(basename /some/path/to/project/HelloWorld.xcodeproj) 
$ echo $filename 
HelloWorld.xcodeproj 

Без расширения:

$ echo ${filename%.*} 
HelloWorld 
1

Да, это возможно:

$ NAME=/some/path/to/project/HelloWorld.xcodeproj 
$ basename $NAME | cut -d. -f1  
HelloWorld 

или если вы всегда знаете, расширение :

$ basename "$(basename "$NAME")" .xcodeproj 

Более универсальное решение (которое также принимать во внимание случай с @fedorqui):

$ basename $NAME | sed 's|\.[[:alpha:]]\+$||' 

И еще один Solutuion (с большим количеством труб, но без регулярных выражений):

$ basename myfile.test.txt | rev | cut -d. -f2- | rev 
$ myfile.test 
+0

Ммм, что, если файл 'myfile.test.txt'? Он просто вернет «myfile». Я знаю, что это не образец ввода, но может произойти. – fedorqui

+1

Хорошая добыча! Я обновил свой ответ. –

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