J'ai un fichier avec le modèle suivant:
foo 111
baz
foo 222
baz
foo 333
baz
qui doit être transformé en
foo 111
bar 111
baz
foo 222
bar 222
baz
foo 333
bar 333
baz
Donc, dupliquez toutes les lignes commençant par foo
et modifiez uniquement foo
le doublon mais laissez le reste de la ligne (qui diffère dans chaque cas) intact. Comment faire ça?
regular-expression
search
LB7979
la source
la source
Réponses:
Voici:
Décomposition:
Parce que la
g
commande mettra à jour le modèle de recherche, vous pouvez donc omettre le modèle à remplacer dans la commande de substitution. (ref:,:h :g
cherchersearch pattern
).Ancienne version:
Décomposition:
Pour insérer la
^M
presse Ctrl+vet enter.Remarque : je suis à l'origine venu avec la "plus ancienne" version, avant d'apprendre la
t
commande. Je vais le laisser mais je ne recommanderai pas de l'utiliser. Le premier est plus simple et plus propre.la source
foo
....^M
comme je l'ai expliqué?t
, puis j'ai ajouté la seconde. Je vais changer l'ordre, tu as raison. Que diriez-vous du premier étant POSIX?Je fais des trucs comme ça tout le temps et je fais juste quelque chose comme
%s/^foo \(.*\)/foo \1\rbar \1/
(en partie parce que je fais aussi beaucoup de tâches similaires qui ne peuvent pas être transformées en quelque chose d'intelligent en utilisant une fonction de copie, et qui\(.*\)
fait maintenant partie de ma mémoire musculaire).Je soupçonne que ce n'est pas compatible POSIX (cela ne fonctionne pas sur d'autres clones vi), mais l'utilisation de
^M
( C-VReturn) au lieu de\r
semble fonctionner sur la plupart des autres clones vi.la source