J'ai essayé de faire un remplacement de sed. Pour une raison quelconque, je ne peux pas ma tête sed et des expressions régulières (ce qui est ma deuxième question sed)Trouver la chaîne de remplacement avant et après
Fondamentalement, je veux trouver du texte et de le remplacer, puis trouver l'occurrence suivante du texte et le remplacer
jusqu'à présent, j'ai ce
echo "This could be anywhere and this bit should be changed \$\{hcvar-BookName\} and this would remain" | sed 's/$\\{hcvar-/" + hcvar-/g'
ce retour:
*This could be anywhere and this bit should be changed " + hcvar-BookName\} and this would remain*
Cependant, je veux revenir
*This could be anywhere and this bit should be changed " + hcvar-BookName + " and this would remain*
Cela remplacerait le} avec + "
La logique serait quelque chose comme:
Find: \$\{hcvar-
Replace with: " + hcvar-
Then find the next occurrence of: \}
Replace with: + "
Le second bit pour remplacer serait juste après la chaîne qui contient: hcvar-
Cela devrait fonctionner pour les exemples de chaînes suivants
- Cela pourrait être partout et ce bit doit être changé \ $ {hcvar-bookname} et cela resterait
- Cela pourrait être partout et ce bit doit être modifié \ $ {hcvar-somethingelse} et ceci restera
- cela pourrait être partout et ce bit doit être changé
\ $ {hcvar-wouldnevercontainspaces} et cela resterait
Toute aide serait appréciée.
Dans Posix sed '$' est littéral si ce n'est pas le dernier caractère de la partie 'pattern' de la commande de substitution. Dans beaucoup de variantes, $ ne sera pas littéral s'il s'agit du dernier caractère logique, c'est-à-dire: 's/\ (a \ | $ \)/b /' remplacera 'a' ou l'octet nul après l'espace de motif' b'. – andlrc