Existe uma maneira no vi(m) de direcionar uma linha específica em um arquivo para uma substituição de string?
Preciso adicionar frequentemente impressões digitais SSL SHA de servidores Web ao meu Mercurial .hgrc. Posso obter a assinatura necessária do Chrome facilmente clicando duas vezes no cadeado e observando os detalhes do certificado, mas obtenho a assinatura com delimitadores de espaço em vez dos delimitadores de dois pontos desejados pelo Mercurial
06 32 1C C5 8A 49 77 85 C5 89 6F 67 75 96 F0 43 77 96 EB 90
Exemplo deCódigo do Google.
Existe uma maneira de:
- Copie a impressão digital para minha área de transferência
- Edite meu .hgrc com vi(m)
- Entre no modo de inserção para colar a impressão digital
Mire apenas nessa linha com um
:s/ /:/g
Salve o arquivo
Agora posso colar a impressão digital em um novo arquivo, fazer a substituição e colocá-la em meu .hgrc com um:r nome do arquivo, mas essa é uma etapa extra que eu não me importaria de pular.
Responder1
Descobri:
Mova o cursor para a linha que deseja modificar e faça o seguinte:
.s/ /:/g
O '.' na frente do comando substituto informa ao vi(m) que você deseja modificar apenas a linha atual.
Referência:http://www.kingcomputerservices.com/unix_101/search_and_replace_with_vi_part_1.htm
Responder2
Se você quiser inseri-lo após a linha N:
:N put =substitute(@+, ' ', '', 'g')
Fim do arquivo: N=$ ; início do arquivo: N=0. @+ é o registro da área de transferência (quando a GUI está em execução).
Responder3
Simplesmente :s/ /:/g
vai servir.
O :substitute
comando funciona apenas na linha atual por padrão.
O /g
modificador global significa substituir todas as correspondências no intervalo especificado, não o arquivo inteiro.)
Responder4
você pretende fazer isso?
echo "06 32 1C C5 8A 49 77 85 C5 89 6F 67 75 96 F0 43 77 96 EB 90" >> <filename>