Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
![]() |
![]() |
|
Опции темы
![]() |
![]() |
#1 |
Форумец
Сообщений: 1,453
Регистрация: 22.12.2005
![]() |
![]()
Хочу написать один bash-скриптец, да затык вышел. Подскажите, кто знает, пожалуйста!
Надо из полного пути к файлу (один из аргументов скрипта) выкусить имя без расширения. Про basename в курсе, но как от расширения избавиться - не соображу. |
![]() |
![]() |
![]() |
#3 |
Форумец
Сообщений: 1,453
Регистрация: 22.12.2005
![]() |
nickvgru,
О, как быстро ответили, спасибо ![]() есть какой-нибудь путь вида: /Volumes/Media/бла-бла.../DJinfo.txt (возможно, *.log) или /mnt/бла-бла.../DJinfo.txt Так вот, это самое DJinfo в качестве строки мне и надо получить. PS. man по gawk зачту вечером в любом случае. |
![]() |
![]() |
![]() |
#4 |
Форумец
Сообщений: 47
Регистрация: 20.09.2004
![]() |
В скритпе нужно задать переменную например:
path_to_the_files=/Volumes/Media/бла-бла... Затем переходим в соответствующий каталог cd $path_to_the_files Затем получаем список файлов в нужном виде (то есть без точки) ls | gawk -F '.' '{print $1}' |
![]() |
![]() |
![]() |
#6 |
Форумец
Сообщений: 1,723
Регистрация: 04.10.2003
![]() |
Если уж вспоминать bash, то там есть такие фишки:
- оставить только последний элемент пути P="${P##/*/}" - удалить расширение P="${P%%.*}" (P это переменная изначально содержащая полный путь и имя файла, а в конце - имя файла без расширения) |
![]() |
![]() |
![]() |
#7 |
Форумец
Сообщений: 1,453
Регистрация: 22.12.2005
![]() |
nickvgru, maximk,
Поскольку gawk есть не во всех системах, а первый параметр скрипта ($1) у меня изначально содержит полный путь и имя файла, вчера сделал так: basename $1 |awk -F '.' '{print $1}' PS. Спасибо, maximk, за Ваш компактный способ. |
![]() |
![]() |
![]() |
#8 |
Форумец
Сообщений: 74
Регистрация: 12.02.2006
Возраст: 57
![]() |
чтобы отсечь именно расширение:
basename $1 | sed 's/\.[^.]*$//' например: my.very.important.file.txt -> my.very.important.file |
![]() |
![]() |
![]() |
#9 |
Форумец
Сообщений: 74
Регистрация: 12.02.2006
Возраст: 57
![]() |
или один sed:
echo $1 | sed 's:^.*/::; s:\.[^.]*$::' |
![]() |
![]() |
![]() |
#10 |
Форумец
Сообщений: 1,453
Регистрация: 22.12.2005
![]() |
yuridichesky,
люто! По функциональности:"отсечь именно расширение" - идеально. Спасибо. PS. Я еще зеленый. Вот так навскидку даже проанализировать такую строку не могу. man sed набирать мне еще рано: только-только в awk въезжаю ![]() |
![]() |
![]() |
![]() |
#11 | |
Форумец
Сообщений: 74
Регистрация: 12.02.2006
Возраст: 57
![]() |
Цитата:
А делает оно вот что. s:^.*/:: s -- substitute, т.е. заменить. s:что_меняем:на_что_меняем:, или s/что_меняем/на_что_меняем/ Итак, что меняем: от начала строки (^) любые символы (.*), заканчивающиеся '/' (/). На что меняем? На пусто. Потом продолжаем обработку строки: s:\.[^.]*$::, т.е. меняем точку (\.), за которой следуют любые символы, кроме точки ([^.]*), которые завершаются концом строки ($) на пусто. Легко! ![]() |
|
![]() |
![]() |