systemadmin.es > Editores > Uso de vi: Buscar y reemplazar

Uso de vi: Buscar y reemplazar

El vi es una herramienta muy potente para la edición de ficheros de texto. Hoy vamos a ver como usarlo para buscar y reemplazar texto en un fichero.

Primero de todo para buscar una determinada cadena en un fichero usaremos simplemente:

/buscar

En este caso buscaremos desde la posición del cursos en adelante. Para buscar al revés lo haremos cambiando / por ?. Por ejemplo:

?buscar

Para el caso que queramos buscar y reemplazar en la línea actual del cursor haremos:

:s/buscar/reemplazar/

En este caso reemplazaría solo la primera cadena que coincidiera, para hacerlo para todas las coincidencias de una linea lo haríamos añadiendo una g al final:

:s/buscar/reemplazar/g

Para realizar la búsqueda y reemplazo en todo el fichero deberemos añadir % delante del todo de la expresión:

:%s/buscar/reemplazar/

En este caso se haría para todas las lineas del texto, pero solo la primera instancia de cada linea, por lo que para hacerlo para todas las apariciones en el texto deberemos completar la expresión con una g al final:

:%s/buscar/reemplazar/g

Actualización:

Para dar mayor visibilidad a lo que nos dice Pedro en los comentarios del post añadimos lo siguiente:

Podemos realizar la substitución para un conjunto de lineas. Por ejemplo, para realizar la substitución entre las lineas 3 y 10 haríamos lo siguiente:

:3,10s/buscar/reemplazar/

Igualmente añadiríamos la g para realizar la substitución para todas las apariciones de la linea:

:3,10s/buscar/reemplazar/g

16 comments to “Uso de vi: Buscar y reemplazar”

  1. Muy bueno!!, no sabia lo de la “g” al final

  2. Muy interesante la entrada, pero podriamos añadir que para buscar y reemplazar en un rango de líneas (pongamos que desde la m hasta la n) se puede usar:

    :m,ns/buscar/reemplazar/
    :m,ns/buscar/reemplazar/g

    De hecho, no conocía lo del %, por lo que para reemplazar en todo el archivo lo que ponía era:

    :1,$s/buscar/reemplazar/g

    Es la primera vez que pongo comentarios en este blog, aunque os sigo desde hace ya bastante tiempo, y aprovecho para comentaros que me parece muy interesante y útil. Seguid asi 🙂

    Un saludo.

  3. Hola Pedro,
    Muy útil el comentario, lo añado al cuerpo del post ahora mismo.

    saludos!

  4. interesante, pero tengo una duda existencial,
    oigo por todos los lados lo util que es vi como editor de textos, pero os hago una pregunta (desde mi ignorancia), para usarlo hay que estar todo el rato acordandote de todos los “atajos” como estos, es verdaderamente util?
    yo suelo usar nano porque me parece sencillo,
    bueno lo dejo ahi, a ver si podeis convencerme de aprender a usar vi 😛
    un saludo

  5. Yo creo que para gustos los colores…

    Personalmente me resulta útil el vi, pero no tengo nada en contra ni de nano ni de emacs. De hecho, antes usaba emacs en lugar de vi, pero me cansé de tener que instalarlo en todos los sistemas que accedía 😉

    La gran utilidad del vi es que lo puedes encontrar, en general, el todo UNIX que pises. Por eso creo que es muy recomendable almenos conocer el uso básico del mismo.

  6. Al igual que Pedro, es mi segundo comentario en este blog, a pesar de seguirlo hace tiempo.

    No habia visto nunca un blog tan claro conciso y concreto CCC, sobre administracion de sistemas.
    Enhorabuena por vuestro trabajo, no entiendo como tiene tan poco seguimiento y tanta publicación.
    Salu2

  7. Hola,
    Muchas gracias por tu comentario 🙂 En realidad en los blog normalmente hay mucho más “usuario oyente” que “usuario activo”. En este en concreto hay unas 18000 paginas vistas mensuales, pero, por desgracia, rara vez aparecen comentarios.

    Anímate y sigue comentando!

    saludos,

  8. En cuanto al vi, la razon esta clara, viene por defecto encualquier sistema UNIX y esto -sobre todo en sistemas embebidos y sistemas offline- lo convierte en un editor de uso obligatorio.
    Si a esto le sumas que posee casi cualquier funcionalidad de un editor pero ejecutandose en modo texto, lo convierte en lo que es, el editor de texto mas utilizado por personal dedicado a tareas de integracion o sistemas.

  9. A Athilha:

    No te preocupes por los atajos, los terminas aprendiendo y los aplicas sin pensar, hasta el punto de tener que hacer un pequeño esfuerzo para recordarlos conscientemente.

    Pero suscribo eso de que para gustos los colores 🙂

    Por cierto, vi incluso lo hay para sistemas windows, y por supuesto viene de serie en cualquier Unix (Al menos en Solaris, Linux y antes en SCO y Ultrix) Es por eso por lo que muchos usuarios de Unix “echamos los dientes” con vi y es nuestro editor de referencia.

    Un saludo.

  10. Solo por complementar un poco más y así ayudar con estas recetas que siempre nos vienen tan bien, aquí va mi primer granito de arena:

    Añadiendo c (confirm) al final de la sentencia de reemplazo obtendremos interactividad en las sustituciones. Esto nos puede salvar de alguna metedura de pata si no somos dioses en el uso de expresiones regulares, por ejemplo 😛 .

    Siguiendo con el último ejemplo propuesto:

    :3,10s/buscar/reemplazar/gc

    Salut!

  11. Muy buen tip!

    saludos

  12. Gracias por el post es de utilidad.

  13. ayudaos , mira tengo un archivo php y necesito buscar <? ese caracter y no la encuentro como lo hago muchas gracias por cualquier ayuda .. saludos

  14. Cómo reemplazo una fecha en vi, por ejemplo, cómo cambio 15/10/2013 por 10/09/2012?

  15. Excelente blog, gracias por los posts. Algo tarde la respuesta pero quizas le sirva a alguien. Luis Medina, en esa cadena que preguntas debes escapar las “/” poniendo antes “\” para poder usarla en la cadena de reemplazo, quedaría algo asi:

    :s/15\/10\/2013/10\/09\/2012

    Saludos

  16. Olvide poner “/” al final de la instrucción

    :s/15\/10\/2013/10\/09\/2012/

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>