Tenho cerca de 200 nomes de arquivos dos quais estou tentando extrair dados. O formato é algo como: filename(120516.1108).mp3 Estou tentando extrair a parte antes do "(" e também a parte antes do ".". Nem todos os arquivos têm esse formato, então há um extra desafio.
A saída deve ser: "nome do arquivo" "120516"
Estou querendo realizar esta operação no bash, se possível. Ainda estou aprendendo e tenho muito pouca experiência em bash. Quaisquer explicações junto com o código são muito bem-vindas.
Responder1
"no bash", algo como:
re='^(.*)\(([0-9]+)\.[0-9]+\).*$'
Então
for f in *.mp3; do
[[ $f =~ $re ]] && printf '"%s" "%s"\n' "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}"
done
Responder2
Se bem entendi, esse comando deve funcionar (se não houver '(' e '.' No nome do arquivo)
data=$(echo $file | cut -d"." -f1 | tr -d "(")
Divida-os em 2 variáveis:
filename=$(echo $file | cut -d"(" -f1)
number=$(echo $file | cut -d"(" -f2 | cut -d"." -f1)
Responder3
Usarexpansão de parâmetrostruncamento.
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