Как разделить имя файла по указанному разделителю

Как разделить имя файла по указанному разделителю

У меня есть около 200 имен файлов, из которых я пытаюсь извлечь данные. Формат примерно такой: filename(120516.1108).mp3 Я пытаюсь извлечь часть перед "(", а также часть перед ".". Не все файлы имеют этот формат, так что это дополнительная проблема.

Вывод должен быть следующим: "имя_файла" "120516"

Я хочу выполнить эту операцию в bash, если это вообще возможно. Я все еще учусь и у меня очень мало опыта в bash. Любые объяснения вместе с кодом приветствуются.

решение1

«в bash», что-то вроде:

re='^(.*)\(([0-9]+)\.[0-9]+\).*$'

Затем

for f in *.mp3; do 
  [[ $f =~ $re ]] && printf '"%s" "%s"\n' "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}"
done

решение2

Если я правильно понимаю, то эта команда должна работать (если в имени файла нет '(' и '.')

data=$(echo $file | cut -d"." -f1 | tr -d "(")

Разделим их на 2 переменные:

filename=$(echo $file | cut -d"(" -f1)
number=$(echo $file | cut -d"(" -f2 | cut -d"." -f1)

решение3

Использоватьрасширение параметраусечение.

case "$filename" in
  *\(*.*\)*)
    before_first_parenthesis=${filename%%\(*}
    after_first_parenthesis=${filename#*\(}
    before_dot=${after_first_parenthesis%%.*}
    echo "$before_first_parenthesis" "$before_dot"
  *) echo "does not match the format";;
esac

Связанный контент