Старый 10.02.2006, 14:16   #1   
Форумец
 
Сообщений: 1,453
Регистрация: 22.12.2005

distantX вне форума Не в сети
Question Вопросик по bash

Хочу написать один bash-скриптец, да затык вышел. Подскажите, кто знает, пожалуйста!
Надо из полного пути к файлу (один из аргументов скрипта) выкусить имя без расширения.
Про basename в курсе, но как от расширения избавиться - не соображу.
  Ответить с цитированием
Старый 10.02.2006, 14:40   #2   
Форумец
 
Сообщений: 47
Регистрация: 20.09.2004

nickvgru вне форума Не в сети
Это можно сделать с помощью команды gawk.
Читайте man gawk. Или пришлите строку и что из нее нужно извлечь
  Ответить с цитированием
Старый 10.02.2006, 14:57   #3   
Форумец
 
Сообщений: 1,453
Регистрация: 22.12.2005

distantX вне форума Не в сети
nickvgru,

О, как быстро ответили, спасибо

есть какой-нибудь путь вида:
/Volumes/Media/бла-бла.../DJinfo.txt (возможно, *.log) или
/mnt/бла-бла.../DJinfo.txt

Так вот, это самое DJinfo в качестве строки мне и надо получить.

PS.
man по gawk зачту вечером в любом случае.
  Ответить с цитированием
Старый 13.02.2006, 07:34   #4   
Форумец
 
Сообщений: 47
Регистрация: 20.09.2004

nickvgru вне форума Не в сети
В скритпе нужно задать переменную например:
path_to_the_files=/Volumes/Media/бла-бла...
Затем переходим в соответствующий каталог
cd $path_to_the_files
Затем получаем список файлов в нужном виде (то есть без точки)
ls | gawk -F '.' '{print $1}'
  Ответить с цитированием
Старый 13.02.2006, 11:51   #5   
Форумец
 
Сообщений: 1,453
Регистрация: 22.12.2005

distantX вне форума Не в сети
nickvgru,
СПА-СИ-БА! :-)
  Ответить с цитированием
Старый 14.02.2006, 08:49   #6   
Форумец
 
Сообщений: 1,723
Регистрация: 04.10.2003

maximk вне форума Не в сети
Если уж вспоминать bash, то там есть такие фишки:

- оставить только последний элемент пути
P="${P##/*/}"
- удалить расширение
P="${P%%.*}"

(P это переменная изначально содержащая полный путь и имя файла, а в конце - имя файла без расширения)
  Ответить с цитированием
Старый 14.02.2006, 10:17   #7   
Форумец
 
Сообщений: 1,453
Регистрация: 22.12.2005

distantX вне форума Не в сети
nickvgru, maximk,
Поскольку gawk есть не во всех системах, а первый параметр скрипта ($1) у меня изначально содержит полный путь и имя файла, вчера сделал так:

basename $1 |awk -F '.' '{print $1}'

PS. Спасибо, maximk, за Ваш компактный способ.
  Ответить с цитированием
Старый 14.02.2006, 21:16   #8   
Форумец
 
Сообщений: 74
Регистрация: 12.02.2006
Возраст: 57

yuridichesky вне форума Не в сети
чтобы отсечь именно расширение:

basename $1 | sed 's/\.[^.]*$//'

например:
my.very.important.file.txt -> my.very.important.file
  Ответить с цитированием
Старый 14.02.2006, 21:46   #9   
Форумец
 
Сообщений: 74
Регистрация: 12.02.2006
Возраст: 57

yuridichesky вне форума Не в сети
или один sed:

echo $1 | sed 's:^.*/::; s:\.[^.]*$::'
  Ответить с цитированием
Старый 15.02.2006, 15:25   #10   
Форумец
 
Сообщений: 1,453
Регистрация: 22.12.2005

distantX вне форума Не в сети
yuridichesky,
люто! По функциональности:"отсечь именно расширение" - идеально.
Спасибо.

PS. Я еще зеленый. Вот так навскидку даже проанализировать такую строку не могу.
man sed набирать мне еще рано: только-только в awk въезжаю
  Ответить с цитированием
Старый 16.02.2006, 12:55   #11   
Форумец
 
Сообщений: 74
Регистрация: 12.02.2006
Возраст: 57

yuridichesky вне форума Не в сети
Цитата:
Сообщение от distantX
yuridichesky,
люто! По функциональности:"отсечь именно расширение" - идеально.
Спасибо.

PS. Я еще зеленый. Вот так навскидку даже проанализировать такую строку не могу.
man sed набирать мне еще рано: только-только в awk въезжаю
Да не за что, рад, что помог.

А делает оно вот что.
s:^.*/::
s -- substitute, т.е. заменить. s:что_меняем:на_что_меняем:, или s/что_меняем/на_что_меняем/

Итак, что меняем: от начала строки (^) любые символы (.*), заканчивающиеся '/' (/). На что меняем? На пусто.
Потом продолжаем обработку строки: s:\.[^.]*$::, т.е. меняем точку (\.), за которой следуют любые символы, кроме точки ([^.]*), которые завершаются концом строки ($) на пусто.

Легко!
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind