grep и cut в cue file + mkdir создает имя каталога с вопросительным знаком

Я делаю это:

var=`grep GENRE Billy_Cobham_-_Drum_\&_Voice_2.cue | cut -d ' ' -f 3`
mkdir $var

Интересующая строка file.cue:

REM GENRE Funky+Jazz

Когда mkdir создает каталог, каталог, показанный с ls, выглядит так:

Funky+Jazz?

Я сделал много тестов, чтобы понять с помощью многих команд, таких как awk grep cut sed во всех тестах, считывающих терминал, результаты «Funky + Jazz». Но в строке есть скрытая «Стартовая строка». И это вызвало странный результат при вызове команды mkdir.

Если я открою терминал в каталоге Funky + Jazz, оболочка будет выглядеть так:

 $ @host:~/Desktop/test/5/Funky+Jazz

Я не знаю, как решить эту проблему, и у меня правильное имя каталога без знака вопроса. Это мой кий

REM GENRE Funky+Jazz
REM DATE 2006
REM DISCID 920BFB0A
REM COMMENT "ExactAudioCopy v0.95b4"
PERFORMER "Billy Cobham"
TITLE "Drum & Voice 2"
FILE "Billy_Cobham_-_Drum_&_Voice_2.ape" WAVE
  TRACK 01 AUDIO
    TITLE "Waveform"
    PERFORMER "Billy Cobham"
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "Real Funk"
    PERFORMER "Billy Cobham"
    INDEX 00 05:04:19
    INDEX 01 05:06:21
  TRACK 03 AUDIO
    TITLE "Running"
    PERFORMER "Billy Cobham"
    INDEX 00 09:42:52
    INDEX 01 09:44:56
  TRACK 04 AUDIO
    TITLE "Final Destination"
    PERFORMER "Billy Cobham"
    INDEX 00 17:30:36
    INDEX 01 17:32:38
  TRACK 05 AUDIO
    TITLE "One More Day To Live"
    PERFORMER "Billy Cobham"
    INDEX 00 24:26:37
    INDEX 01 24:28:38
  TRACK 06 AUDIO
    TITLE "Ozone Part 1"
    PERFORMER "Billy Cobham"
    INDEX 00 29:41:47
    INDEX 01 29:43:39
  TRACK 07 AUDIO
   TITLE "Ozone Part 2"
    PERFORMER "Billy Cobham"
    INDEX 00 31:56:06
    INDEX 01 31:56:16
  TRACK 08 AUDIO
TITLE "Take Seven"
    PERFORMER "Billy Cobham"
    INDEX 00 38:24:64
INDEX 01 38:26:68
  TRACK 09 AUDIO
    TITLE "Let Me Breathe"
PERFORMER "Billy Cobham"
    INDEX 00 44:28:41
    INDEX 01 44:30:41
  TRACK 10 AUDIO
    TITLE "Amazon"
    PERFORMER "Billy Cobham"
    INDEX 00 48:54:16
    INDEX 01 48:56:20
0
задан 26 July 2012 в 22:44

1 ответ

Решение заключается в следующем:

#!/bin/bash

while read line; do
   if [ "${line:0:10}" = "REM GENRE " ]; then
      folder=$(echo "${line:10}" | tr -d '\n\r')
      mkdir $folder
      break
   fi
done < file.cue
echo "Folder $folder has been created"

Протестировано с файлом примера, который вы добавили в качестве комментария к этому ответу.

Объяснение: В начале есть цикл while, который, как вы можете видеть из done < file.cue, он читает file.cue и читает одну за другой строки file.cue. Теперь в операторе if строка

if [ "${line:0:10}" = "REM GENRE " ]; then

означает: Если первые 10 букв переменной 'line' равны "REM GENRE", то ...

Когда утверждение if истинно, мы находимся на интересующей нас строке. Однако нас интересует эта строка, это символы после 10-й буквы строки $. $ {Line: 10} означает все после первых 10 букв переменной 'line'.

Итак, я «повторяю» все после первых 10 символов, и с помощью «tr» я вырезал любой символ новой строки (что и стало причиной проблемы в действительности). Я добавляю это в переменную «папка» и создаю ее.

0
ответ дан 26 July 2012 в 22:44

Другие вопросы по тегам:

Похожие вопросы: