2011-05-09 35 views
5

Tengo muchos archivos, y deseo eliminar la línea 1 a 55, luego agregue un comentario (por ejemplo: //) para la línea 25 a 35, luego los guardo en un nuevo archivo.edición automatizada de varios archivos

¿Cómo hago esto automáticamente con vim en bash shell?

+1

Debe usar 'sed' en el shell' bash' si desea 'editar' archivos sin abrirlos. – pavium

+2

'ex' sería una coincidencia mejor que' sed', 'ex' utiliza el mismo conjunto de comandos establecido' vi'. –

Respuesta

3

Puede lograr esto elegantemente con ed, el editor de línea unix, el antecesor de vi.

fix_file() { 
    ed $1 <<< EOF 
    1,55d 
    25,35s_.*_// &_ 
    wq 
    EOF 
} 

Ahora, para cada archivo F que necesita, sólo hay que ejecutar fix_file F.

13

pesar del hecho de que el uso de ed o sed es una práctica común , veces utilizando Vim es mucho más conveniente. De hecho, en este caso en lugar de escribir un guión ed -como "a ciegas", es más fácil llevar a cabo la edición deseada de uno de los archivos de forma interactiva con

vim -w log.vim file1.txt 

y luego repetir en el resto de los archivos.

for f in file*.txt; do vim -s log.vim "$f"; done 

En su expediente del caso log.vim es probable que tenga un contenido similar a esto:

gg55dd:25,35s/^/\/\//
:w %_new 
:q! 

Tenga en cuenta, que para salvar el archivo con el nuevo nombre que no debería escribir directamente, pero prefiere usar % sustitución . Otra forma podría ser duplicar los archivos de antemano y luego editarlos en su lugar (guardando cada uno de ellos por :w).

La ventaja de este enfoque es que puede realizar todos los cambios interactivamente para garantizar que obtiene el resultado que desea obtener.


Y, por supuesto, se puede hacer lo mismo de una manera ed -como.

for f in file*.txt; do vim -c '1,55d|25,35s/^/\/\/ /|w! '"${f}_new"'|q!' $f 

Por no mencionar que es claramente expresado en la pregunta que se prefiere una solución Vim.

+0

Nunca haga eso con la versión de GUI (gvim), vea [mi pregunta] (http://stackoverflow.com/questions/3981535/using-the-w-option-of-vim) y el error relacionado. Con la GUI debe editar el script. – Benoit

+0

@Benoit ¡Gracias por la advertencia! Como nunca uso GVim, es poco probable que yo pueda notar ese comportamiento, aunque es importante saberlo. –