donné Par souci de simplicité, disons que nous avons des chaînes d'entrée avec ce format:Regex pour remplacer tous les ocurrences d'un caractère donné, seulement après un match
*text1*|*text2*
Alors, je veux partir text1 seul, et supprimer tous les espaces dans text2.
Cela pourrait être facile si nous ne disposions pas text1, une recherche simple et remplaçons comme celui-ci ferait:
%s/\s//g
mais dans ce contexte, je ne sais pas quoi faire.
J'ai essayé avec quelque chose comme:
%s/\(.*|\S*\).\(.*\)/\1\2/g
qui fonctionne, mais en supprimant seul le premier caractère, je veux dire, cela devrait être exécuté sur la même ligne une fois pour chaque espace incriminée.
Donc, une restriction préférée, est à résoudre cela avec une seule recherche et remplacer. Et, bien que j'aie utilisé la syntaxe de Vim, utilisez la saveur d'expression régulière avec laquelle vous êtes le plus à l'aise pour répondre, je veux dire, peut-être que vous avez besoin de fonctionnalités offertes uniquement par Perl.
Edit: Ma solution pour VIM:
%s:\(|.*\)\@<=\s::g
'awk' peut résoudre ce problème pour vous en un rien de temps. –
Vous voulez dire, d'abord analyser la "colonne" à travers awk, puis en utilisant sed ou quoi que ce soit pour lancer la recherche et remplacer dans cette seule colonne? C'est similaire à ma solution actuelle, mais je voudrais le faire uniquement avec l'expression rationnelle. – Doppelganger
@Carl Norum: J'ai installé awk, mais il se trouve juste là et ne fait rien. Ou vouliez-vous dire un programme awk? :) – ysth