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
Francisco compra el Pan
Odio que me despierte el panadero
Compra pan cuando estés acampando
Tengo congelado algo de pan de la semana pasada
Veamos qué podemos hacer con él
Buscar y reemplazar un texto
Sustituir texto
Si lanzamos desde la terminal un
Código:
sed 's/pan/XXXX/g' /tmp/frases.txt
obtendremos como resultado
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
Ignorar mayúsculas y minúsculas
En la primera frase se nos ha escapado Pan para evitarlo debemos lanzar el comando sed del siguiente modo
Código:
sed 's/pan/XXXX/gi' /tmp/frases.txt
NOTA: Observa el /gi al final del patrón
obtendremos como resultado
Francisco compra el XXXX
Odio que me despierte el XXXXadero
Compra XXXX cuando estés acamXXXXando
Tengo congelado algo de XXXX de la semana pasada
Sustituir palabras completas
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
Código:
sed 's/pan\b/XXXX/gi' /tmp/frases.txt
obteniendo como resultado
Francisco compra el XXXX
Odio que me despierte el panadero
Compra XXXX cuando estés acampando
Tengo congelado algo de XXXX de la semana pasada
Líneas de inicio y fin
Si queremos que sólo se cambie el texto comprendido entre dos líneas del fichero (ambas incluidas) deberemos recurrir al siguiente comando
Código:
sed '2,3s/pan/XXXX/gi' /tmp/frases.txt
NOTA: observa el 2,3 que indica que los cambios deben realizarse en las líneas 2 y 3 dejando inalteradas el resto.
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
Francisco compra el Pan
Odio que me despierte el XXXXadero
Compra XXXX cuando estés acamXXXXdo
Tengo congelado algo de pan de la semana pasada
De una línea hasta el final
Si queremos cambiar todas las ocurrencias desde una línea concreta hasta el final, lanzaremos el comando del siguiente modo
Código:
sed '2,$ s/pan/XXXX/gi' /tmp/frases.txt
observando que se ha utilizado $ en lugar del número de línea final para indicar que debe llegar hasta el final del fichero.
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
Marcadores