1

Собственно сам вопрос: есть файл типа (C81)(яп.символы)(яп.символы)[DDBY] Relax Piano (tta+cue)
Нужно переделать в: DDBY - Relax Piano

Если с "вырыванием" Relax Piano ещё можно как то справится то на DDBY у меня ступор:
Пример до чего я додумался (естественно потом строки объединю):

#!/bin/sh
IFS="
" #"Отзерказываем" пробел
for fm in `ls`; #Перечисляем файлы в папке
  do 
rk=`echo "$fm" | sed 's/*[^[\]\]*$//;s/[[^*]//;s/\][^*]*$//;'`
echo "$rk"
done

Как убрать начало мозги уже не варят...
man по sed читал - что-то понял, что-то нет...

2

 Консоль:
echo '(C81)(яп.символы)(яп.символы)[DDBY] Relax Piano (tta+cue)' | sed 's=^(.*)(.*)(.*)\[\(.*\)\] \(.*\) (.*)=\1 - \2='
DDBY - Relax Piano

95% процентов проблем находятся между клавиатурой и стулом.
+ Gam

3 (13.03.2012 06:25:10 отредактировано Gam)

Fat-Zer, а если допустим там будет не 3 круглых скобок, а несколько?
Можно задать вырезание текста до квадратных скобок?
Просто проблема в том что неизвестно сколько там будет круглых скобок перед квадратными.
Известно точно что будет конструкция вида: бла-бла-бла...[Название группы] Название альбома...бла-бла-бла
За пример благодарю.

Вопрос решил)

 Консоль:
sed 's=^.*\[\(.*\)\] \(.*\) (.*)=\1 - \2='

Большое спасибо)

4

Gam пишет:

Если с "вырыванием" Relax Piano ещё можно как то справится то на DDBY у меня ступор:
Пример до чего я додумался (естественно потом строки объединю):

Gam пишет:

rk=`echo "$fm" | sed 's/*[^[\]\]*$//;s/[[^*]//;s/\][^*]*$//;'`

[DDBY] это нечто в квадратных скобках? Тогда оно выдирается так

 Консоль:
$ echo "(C81)(яп.символы)(яп.символы)[DDBY] Relax Piano (tta+cue)" | sed -r 's/.*(\[[^]]*\]).*/\1/'
[DDBY]

нужно помнить, что ] надо экранировать в общем случае, но внутри [] экранировать НЕ нужно. Однако ] нужно ставить либо сразу после [, либо сразу после ^, если он используется как инверсия. С учётом этого любой символ кроме ] записывается [^]], а любой символ кроме ], a, b, или c записывается как [^]abc], но НЕ как [^ab]c] и не как [^abc]]

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

5

Gam пишет:

sed 's=^.*\[\(.*\)\] \(.*\) (.*)=\1 - \2='

Gam пишет:

Вопрос решил)

вы точно ЭТОГО хотели?

 Консоль:
$ echo "(C81)(яп.символы)(яп.символы)[DDBY] Rela[x] Piano (tta+cue)" | sed 's=^.*\[\(.*\)\] \(.*\) (.*)=\1 - \2='
x - Piano

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

6 (14.03.2012 14:05:02 отредактировано Gam)

Хм...однако....

Может как то запретить реагировать на квадратные скобки в названии альбома?
Допустим убрать все символы до первой квадратной скобки, выбрать все символы в первых квадратных скобках, после этого скобки игнорировать и обработать оставшие символы до последних круглых скобок.
Как я понимаю простым экранированием тут не добиться...К тому же точно неизвестно будут ли скобки в названии или нет.

благодарю за объяснение

7

Gam, во первых первая звёздочка жадная, и жрёт ВСЁ, что сможет. В том числе и первое выражение [в скобках], во вторых в вашем условии не указано, что внутри скобок не может быть скобок. потому [x] xxxxxxxxxxxxxxxxxxxxxxxxxx [x] ваша регулярка воспринимает как ОДНО выражение в скобках.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

8 (14.03.2012 14:42:03 отредактировано Gam)

Печально, будем думать и юзать гугл дальше.
И последний вопрос (если я ещё не сильно утомил): с помощью чего можно задать проверку имён файлов (а точнее расположение скобок) по шаблонам?
Что бы для каждого типа задать свой шаблон переименования.

9

Gam, http://drbatty.ru/sed
лень повторяться...

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)
+ Gam