У меня есть около 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