Le code ci-dessous tourne une chaîne abcd-efj-klmnop-3.7.1.txt code> à abcd-efj-klmnop - *. *. *. TXT code> pendant que je aimerait que ce soit abcd-efj-klmnop - *. txt code> (avec une seule étoile). Comment y parvenir? FILE_NAME="abcd-efj-klmnop-3.7.1.txt"
WILD_NAME=${FILE_NAME//[0-9]/*}
echo $WILD_NAME
4 Réponses :
Je suggérerais ce motif: la partie supplémentaire (\. [0-9] +) * code> recherche un point suivi d'un ou plusieurs chiffres, n'importe quel nombre de fois. P> p>
Voulez-vous s'il vous plaît essayer: si votre bash code> prend en charge shopt code> intégré, vous pouvez également dire: p> < Pré> xxx pré> p>
Peut-être pas assez robuste mais si le motif est identique, une solution PE peut être faite. doit imprimer. P> var2='*.'
var=abcd-efj-klmnop-3.7.1.txt;
echo "${var%%-[0-9]*}$var2${var##*.}"
Votre solution consomme également le tiret après klmnop code>, ce qui ne semble pas ce que l'op voulait.
Droite, je n'ai pas attrapé ça, je vais ajouter une correction.
Vous n'avez pas de "chiffres multiples", comme vous l'avez demandé dans votre message, mais une chaîne constituée de chiffres et de points. Par conséquent, je ferais un L'expression de substitution mangerait d'abord le point devant l'extension code> txt txt>, c'est pourquoi je dois la restaurer. p> p>
Aurez-vous toujours 3 chiffres avant l'extension?
Vous devez être spécifique sur ce que vous essayez de remplacer. Des choses entre le dernier trait d'union et l'extension? Ou des chiffres et dot avant la prolongation? ou autre chose?