Eu tenho um arquivo com o seguinte padrão:
foo 111
baz
foo 222
baz
foo 333
baz
que precisa ser transformado em
foo 111
bar 111
baz
foo 222
bar 222
baz
foo 333
bar 333
baz
Portanto, duplique todas as linhas que começam com foo
e mude apenas foo
na duplicata, mas deixe o restante da linha (que difere em cada caso) intacto. Como fazer isso?
regular-expression
search
LB7979
fonte
fonte
Respostas:
Aqui está:
Decomposição:
Como o
g
comando atualizará o padrão de pesquisa, você poderá omitir o padrão para substituir no comando substitute. (ref:,:h :g
procuresearch pattern
).Versão antiga:
Decomposição:
Para inserir a
^M
imprensa Ctrl+ve enter.Nota : Originalmente, eu vim com a versão "mais antiga" antes de aprender sobre o
t
comando. Vou deixar, mas não vou recomendar o uso. O primeiro é mais limpo e direto.fonte
foo
....^M
como eu expliquei?t
e, em seguida, adicionei a segunda. Vou mudar a ordem, você está certo. Que tal o primeiro sendo POSIX?Eu faço coisas assim o tempo todo e apenas faço algo assim
%s/^foo \(.*\)/foo \1\rbar \1/
(parcialmente porque eu também faço muitas tarefas semelhantes que não podem ser transformadas em algo inteligente usando uma função de cópia e que agora\(.*\)
faz parte da minha memória muscular).Eu suspeito que não seja compatível com POSIX (não funciona em outros clones vi), mas usar
^M
( C-VReturn) em vez de\r
parece funcionar na maioria dos outros clones vi.fonte