3 votes

Remplacer une plage de jetons dans une chaîne

J'ai la chaîne suivante :

this and this and this and this and this and this

et je veux mettre en majuscule la 3ème à la 5ème occurrence du jeton this:

this and this and THIS and THIS and THIS and this

La chaîne ne contient pas de sauts de ligne.

0voto

snoofkin Points 4574

Vous pouvez faire quelque chose comme ça....

my @str = split(/\s+/,$string);

$str[4] = uc($str[4]); # Mettre en majuscule le cinquième élément...
.
.                      # Répéter ici pour chaque élément que vous voulez...
.

$string = join(' ',@str);

0voto

potong Points 18653

Cela pourrait fonctionner pour moi:

echo "this and this and this and this and this and this" | 
sed 's/this/&\n/6g;s/this[^\n]/\U&/3g;s/\n//g'
this and this and THIS and THIS and THIS and this

Explication:

La 3ème à la 5ème occurrence de la chaîne d'objets pourrait être désignée comme le m'ème au n'ème

  1. Ajouter un saut de ligne (ou tout autre caractère non présent dans la ligne) à la chaîne d'objets du m'ème+1 globalement.
  2. Modifier ou remplacer la chaîne d'objets à partir de la n'ème occurrence globalement.
  3. Supprimer tous les sauts de ligne, restaurant ainsi les chaînes d'objets originales

Pour cet exemple, cela semble aussi fonctionner:

sed 's/this/\U&/3ig;s//\L&/6g'

Tout comme ceci:

sed ':a;s/this/\U&/3;s/^/\n/;/^\n\{3\}/!ba;s///'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X