Me gustaría editar archivos pasados en entrada de canalización usando vim de manera no interactiva o editar archivos en el lugar (similar a sed
).
Pocos ejemplos 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.
Sin embargo, podría leer aquí que:
sed
es un S TREAM ED itor, no un editor de archivos. Sin embargo, las personas en todas partes tienden a abusar de él por tratar de editar archivos. No edita archivos.
En segundo lugar, algunas opciones, como la edición in situ ( -i
), son portables.
¿Cómo se puede lograr la misma funcionalidad en vim?
file
de tu segunda línea de comando.Respuestas:
Para editar archivos de manera no interactiva
ex
(vi
es el modo visual paraex
), puede usar+{command}
o-c {command}
parámetros que le permitan ejecutar los comandos vi después de que se haya leído el primer archivo.El
ex
es un editor de línea de comandos estándar (similar aed
).También se
vipe
debe usar un (editor de canalización de comandos Vim) que es parte delmoreutils
paquete y le permitirá ejecutar su editor en medio de una canalización de Unix y editar los datos que se canalizan entre los programas.Ejemplos
La entrada y salida estándar simple mediante tuberías se puede lograr mediante esta sintaxis de shell:
Aquí hay un ejemplo simple de cómo imprimir el archivo después de la sustitución:
Más ejemplos para editar archivos en el lugar:
También puede usarlo
-s {scriptin}
para que los comandos se carguen desde el archivo, por ejemplo:o usando la redirección de E / S:
Para editar un archivo y guardar los cambios en otro, consulte los siguientes ejemplos:
Más ejemplos prácticos.
Ejemplo real en vivo de la especificación RPM :
Extrayendo etiquetas html :
Eliminar etiquetas XML :
Eliminar la etiqueta de estilo del encabezado e imprimir la salida analizada:
Analiza html con múltiples reglas complejas:
Aún más ejemplos:
Ver también:
fuente
vim '+:0,$s/foo/test/g' '+:wq! file2' file1
en su lugar.bufdo
. A pesar de que Vim es lo que está instalado prácticamente en todas partes, vale la pena saber que puede editar archivos de script utilizando solo las funciones compatibles con POSIXex
.ex
y realmente aprenderlo. Gracias. Algunas lecturas adicionales sobre este tema (divulgación completa: escribí esto;) es: invertir cada cuatro líneas conex
y usar la-c
opción . Puede agregarlos a su lista de enlaces en la parte inferior, si lo desea. :)