Question

Je suis en train d'écrire un script shell (bash) et je suis en train de trouver un moyen facile d'accomplir une tâche simple.

J'ai une chaîne de caractères dans une variable. Je ne sais pas si cela est pertinent, mais il peut contenir des espaces, des sauts de ligne, parce qu'en fait cette chaîne est le contenu d'un fichier texte entier.

Je veux remplacer la dernière occurence d'un certain sous-chaîne avec autre chose. Peut-être que je pourrais utiliser une expression rationnelle pour cela, mais il y a deux moments qui me confondent:

  • Je dois correspondre à compter de la fin, pas de début
  • la sous-chaîne que je veux pour rechercher est fixe et non variable.
Était-ce utile?

La solution

  • pour tronquer au début: ${var#pattern}
  • tronquer au ${var%pattern} final
  • ${var/pattern/repl} pour le remplacement général

les motifs sont l'expansion du style « filename », et le dernier peut être préfixées avec # ou % pour correspondre seulement au début ou à la fin (respectivement)

il est dans le bash (long) manpage. consultez le chapitre « Paramètre d'extension ».

Autres conseils

expression amn comme ceci

s/match string here$/new string/

devrait faire l'affaire - s est pour le substituer, / briser la commande et le $ est le marqueur de fin de ligne. Vous pouvez essayer cela en vi pour voir si elle fait ce que vous avez besoin.

Je regardais les pages de manuel pour awk ou sed.

La réponse de Javier est shell spécifique et ne fonctionnera pas dans toutes les coquilles.

Les réponses sed MrTelly et epochwolf fait allusion sont incomplets et devraient ressembler à ceci:

MyString="stuff ttto be edittted"
NewString=`echo $MyString | sed -e 's/\(.*\)ttt\(.*\)/\1xxx\2/'`

La raison pour laquelle cela fonctionne sans avoir à utiliser le $ pour marquer la fin est que la première. * 'Est avide et va tenter de rassembler autant que possible tout en permettant au reste de l'expression régulière est vrai.

Cette commande sed devrait fonctionner correctement dans un contexte shell utilisé.

En général, quand je suis coincé avec Sed-je utiliser cette page,

http://sed.sourceforge.net/sed1line.txt

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top