0
votes

Comment utiliser remplacer plusieurs chiffres avec un seul caractère

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


2 commentaires

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?


4 Réponses :


1
votes

Je suggérerais ce motif: xxx

la partie supplémentaire (\. [0-9] +) * recherche un point suivi d'un ou plusieurs chiffres, n'importe quel nombre de fois.


0 commentaires

0
votes

Voulez-vous s'il vous plaît essayer: xxx

si votre bash prend en charge shopt intégré, vous pouvez également dire: < Pré> xxx


0 commentaires

0
votes

Peut-être pas assez robuste mais si le motif est identique, une solution PE peut être faite. XXX PRE>

doit imprimer. P>

  var2='*.'
  var=abcd-efj-klmnop-3.7.1.txt; 
  echo  "${var%%-[0-9]*}$var2${var##*.}"


2 commentaires

Votre solution consomme également le tiret après klmnop , ce qui ne semble pas ce que l'op voulait.


Droite, je n'ai pas attrapé ça, je vais ajouter une correction.



0
votes

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 xxx

L'expression de substitution mangerait d'abord le point devant l'extension txt , c'est pourquoi je dois la restaurer.


0 commentaires