URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 78015
[ Назад ]

Исходное сообщение
"подскажите по sh скриптам"

Отправлено asd1221 , 24-Дек-07 13:00 
надо с помощью sh немного переделать строку.

Например файлу передается параметр  ${1}  /mnt/LinuxDVR/imgs/85/00/1-20071224123939-02.jpg
До имени файла может быть разное количество символов.
Надо поменять строку на такую
/mnt/LinuxDVR/imgs/85/00/1-20071224123939.avi
В имени файла всегда одинаковое количество символов, тоесть по шаблону.

Можно ли это сделать на sh?
Подскажите как.
Заранее спасибо.:)


Содержание

Сообщения в этом обсуждении
"подскажите по sh скриптам"
Отправлено DogEater , 24-Дек-07 13:03 
>[оверквотинг удален]
>
>Например файлу передается параметр  ${1}  /mnt/LinuxDVR/imgs/85/00/1-20071224123939-02.jpg
>До имени файла может быть разное количество символов.
>Надо поменять строку на такую
>/mnt/LinuxDVR/imgs/85/00/1-20071224123939.avi
>В имени файла всегда одинаковое количество символов, тоесть по шаблону.
>
>Можно ли это сделать на sh?
>Подскажите как.
>Заранее спасибо.:)

man basename и будет тебе щасте


"подскажите по sh скриптам"
Отправлено newser , 24-Дек-07 13:22 
>[оверквотинг удален]
>>До имени файла может быть разное количество символов.
>>Надо поменять строку на такую
>>/mnt/LinuxDVR/imgs/85/00/1-20071224123939.avi
>>В имени файла всегда одинаковое количество символов, тоесть по шаблону.
>>
>>Можно ли это сделать на sh?
>>Подскажите как.
>>Заранее спасибо.:)
>
>man basename и будет тебе щасте

Добавлю ещё man sed. :)


"подскажите по sh скриптам"
Отправлено asd1221 , 24-Дек-07 13:25 

>man basename и будет тебе щасте

щасте почти наступило, но не до конца.


С помощью такого
basename /mnt/LinuxDVR/imgs/85/00/1-20071224123939-02.jpg .jpg
получается такое
1-20071224123939-02

соответсвенно
basename /mnt/LinuxDVR/imgs/85/00/1-20071224123939-02.jpg -02.jpg
дает такое
1-20071224123939

Как мне выдрать этот 02 в конце, или просто убрать последнии 7 символов?


"подскажите по sh скриптам"
Отправлено exn , 24-Дек-07 20:20 
DIR=`dirname $1`
FILE=`basename $1 $2`
echo "$DIR/$FILE$3"


если передать такую строку
/et/cadfdf/asdfdf.jpg jpg avi

выйдет такая
/et/cadfdf/asdfdf.avi

тоесть 1й сам путь, 2й расширение, и 3й на что меняем


"подскажите по sh скриптам"
Отправлено exn , 24-Дек-07 20:21 
а вообще изврат. лучше sed

"подскажите по sh скриптам"
Отправлено Varda , 24-Дек-07 20:53 
В чём беда?

basename "/mnt/LinuxDVR/imgs/85/00/1-20071224123939-02.jpg .jpg" | \
cut -d "-" -f 1-2

вывод:

1-20071224123939


for file in *.avi; do
  echo $(basename "$file" | cut -d "-" -f 1-2).jpg
done


"подскажите по sh скриптам"
Отправлено asd1221 , 25-Дек-07 09:02 
Всем спасибо.
Прочитав man sed, сделал так:

echo "/mnt/LinuxDVR/imgs/85/00/1-20071224123939-02.jpg" | sed -e 's/-...jpg/.avi/g'