Gostaria de editar arquivos passados na entrada de pipeline usando o vim de maneira não interativa ou editar arquivos no local (semelhante a sed
).
Poucos exemplos usando sed
:
$ sed -i'.bak' s/foo/test/g file # Edit file in-place.
$ cat file | sed s/foo/test/g # Parse file in pipeline.
No entanto, eu poderia ler aqui , que:
sed
é um editor ED do S tream , não um editor de arquivos. No entanto, pessoas de todos os lugares tendem a abusar dele por tentar editar arquivos. Não edita arquivos.
Em segundo lugar, algumas opções, como edição in-loco ( -i
), são portáteis.
Como a mesma funcionalidade pode ser alcançada no vim?
command-line
substitute
ex-mode
invocation
kenorb
fonte
fonte
file
da sua segunda linha de comando.Respostas:
Para editar o arquivo de forma não interativa usando
ex
(vi
é o modo visualex
), você pode usar+{command}
ou-c {command}
parâmetros que permitem executar os comandos vi após a leitura do primeiro arquivo.O
ex
é um editor de linha de comando padrão (semelhante aed
).Também
vipe
deve ser usado (um editor de canal de comando do Vim) que faz parte domoreutils
pacote e isso permitirá que você execute seu editor no meio de um pipeline unix e edite os dados que estão sendo canalizados entre os programas.Exemplos
Entrada e saída padrão simples usando pipes podem ser alcançadas por esta sintaxe do shell:
Aqui está um exemplo simples de como imprimir o arquivo após a substituição:
Mais exemplos para editar arquivos no local:
Você também pode usar
-s {scriptin}
para que os comandos sejam carregados do arquivo, por exemplo:ou usando o redirecionamento de E / S:
Para editar um arquivo e salvar as alterações em outro, verifique os seguintes exemplos:
Exemplos mais práticos.
Exemplo ao vivo real da especificação RPM :
Extraindo tags html :
Removendo tags XML :
Removendo a marca de estilo do cabeçalho e imprima a saída analisada:
Analise o html com várias regras complexas:
Ainda mais exemplos:
Veja também:
fonte
vim '+:0,$s/foo/test/g' '+:wq! file2' file1
.bufdo
,. Embora o Vim seja o que está instalado virtualmente em qualquer lugar, vale a pena saber que é possível criar scripts para edição de arquivos usando apenas os recursos compatíveis com POSIXex
.ex
e realmente aprender. Obrigado. Algumas leituras adicionais sobre esse assunto (divulgação completa: escrevi estas;) são: revertendo a cada quatro linhas comex
e usando a-c
opção . Você pode adicioná-los à sua lista de links na parte inferior, se desejar. :)