Comment split un nom de file à un délimiteur spécifié

J'ai environ 200 noms de files dont j'essaie de tirer des données. Le format est quelque chose comme: filename (120516.1108) .mp3 J'essaie de tirer la partie avant le "(" et aussi la partie avant le "." Tous les files n'ont pas ce format, défi.

La sortie doit être: "nom de file" "120516"

Je veux effectuer cette opération dans bash si possible. J'apprends encore et ai très peu d'expérience dans bash. Toutes les explications avec le code sont les bienvenues.

Si je comprends bien, cette command devrait fonctionner (s'il n'y a pas de '(' et '.' Dans le nom de file)

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

Divisez-les en 2 variables:

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

"en bash", quelque chose comme:

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

alors

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

Utilisez la troncature d' extension de paramètre .

 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