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