J'ai la ligne suivante:
abababtestab
J'essaie de trouver une sed
expression pour supprimer toutes les occurrences de ab
depuis le début de la ligne afin que la ligne transformée soit:
testab
Je pense que cela devrait être simple, mais je ne sais vraiment rien sed
.
Ce que j'ai jusqu'à présent, c'est:
sed 's/^ab//'
Mais cela ne supprime que la première occurrence de ab.
sed
de vers 1979 l'a soutenu. Il faudrait que ce soit une imitation inférieure pour ne pas gérer le regroupement.\n*
, mais pas\n\{min,max\}
.\(...\)*
, ou\(...\)\{min,max\}
, en tant que résultat non intentionnel d'une implémentation spécifique, et ils ont pris en charge les expressions de duplication et d'intervalle après les sous-expressions et les références arrières.\(ab\)\1*
version fonctionne avec l'héritage par défautsed
, et la\(ab\)*
version fonctionne avec l'héritage SuSv4sed
. Du moins, c'est le cas pour ma version. Certes, j'ai construit mon héritage contre Musl lib C, et donc je peux imaginer que cela pourrait le faire se comporter différemment. Mais généralement, lorsqu'une fonctionnalité spécifiée fonctionne dans un outil d'héritage SuSv4 d'héritage mais pas dans l'outil par défaut, c'est parce que le développeur l'a fait.Un autre
sed
:Avec chaque ligne d'entrée, nous mettons en place une étiquette
:1
, puis faisons unes
substitutionab
au début de la ligne. Si l's
ubstitution réussit,t
est la branche de commande à étiqueter1
, refaites le travail jusqu'à ce qu'aucunab
motif n'apparaisse au début de la ligne, nous avons terminé.la source
s/^ab//; t1
c'est suffisant