Suele ser habitual encontrar en las explicaciones de Internet la necesidad de sustituir algún dato en un fichero de texto obligando para ello al usuario a localizar el archivo, hacer una búsqueda en su contenido y hacer el cambio pedido sin equivocarse en ninguno de los pasos.
No es una tarea excesivamente complicada pero si que puede resultar aburrida, innecesaria y propensa a errores.
Texto de ejemplo
Sea el contenido del fichero /tmp/frases.txt, que usaremos en nuestros ejemplos, el siguiente
Veamos qué podemos hacer con élFrancisco compra el Pan
Odio que me despierte el panadero
Compra pan cuando estés acampando
Tengo congelado algo de pan de la semana pasada
Buscar y reemplazar un texto
Sustituir texto
Si lanzamos desde la terminal un
obtendremos como resultadoCódigo:sed 's/pan/XXXX/g' /tmp/frases.txt
Ignorar mayúsculas y minúsculasFrancisco compra el Pan
Odio que me despierte el XXXXadero
Compra XXXX cuando estés acamXXXXdo
Tengo congelado algo de XXXX de la semana pasada
En la primera frase se nos ha escapado Pan para evitarlo debemos lanzar el comando sed del siguiente modo
NOTA: Observa el /gi al final del patrónCódigo:sed 's/pan/XXXX/gi' /tmp/frases.txt
obtendremos como resultado
Sustituir palabras completasFrancisco compra el XXXX
Odio que me despierte el XXXXadero
Compra XXXX cuando estés acamXXXXando
Tengo congelado algo de XXXX de la semana pasada
En los ejemplos anteriores encontramos que se han producido sustituciones de texto en palabras como panadero y acampando. Para evitarlo utilizaremos /b del siguiente modo
obteniendo como resultadoCódigo:sed 's/pan\b/XXXX/gi' /tmp/frases.txt
Líneas de inicio y finFrancisco compra el XXXX
Odio que me despierte el panadero
Compra XXXX cuando estés acampando
Tengo congelado algo de XXXX de la semana pasada
Si queremos que sólo se cambie el texto comprendido entre dos líneas del fichero (ambas incluidas) deberemos recurrir al siguiente comando
NOTA: observa el 2,3 que indica que los cambios deben realizarse en las líneas 2 y 3 dejando inalteradas el resto.Código:sed '2,3s/pan/XXXX/gi' /tmp/frases.txt
NOTA: observa igualmente que he quitado el /b para que sustituya cualquier ocurrencia de pan sin tener en cuenta si es, o no, una palabra completa o está dentro de otra; de este modo conseguimos que se vean cambios en ambas líneas.
El resultado del comando anterior sería
De una línea hasta el finalFrancisco compra el Pan
Odio que me despierte el XXXXadero
Compra XXXX cuando estés acamXXXXdo
Tengo congelado algo de pan de la semana pasada
Si queremos cambiar todas las ocurrencias desde una línea concreta hasta el final, lanzaremos el comando del siguiente modo
observando que se ha utilizado $ en lugar del número de línea final para indicar que debe llegar hasta el final del fichero.Código:sed '2,$ s/pan/XXXX/gi' /tmp/frases.txt
El resultado sería
Francisco compra el Pan
Odio que me despierte el XXXXadero
Compra XXXX cuando estés acamXXXXdo
Tengo congelado algo de XXXX de la semana pasada
Visto en Informático de guardia

Normas
Juegos
Chicas del Día


Citar
Marcadores