muchas personas saben cómo usar sed básico:

sed 's/hello/bonjour/' greetings.txt echo "hi there" | sed 's/hi/hello/' 

que cubrirá el 80% de su uso sed. Este post es sobre el otro 20%. Thinkof como un curso de seguimiento después de sed

para que pueda cambiar los flujos de salida de tubería a sed. ¿Qué pasa si desea cambiar el archivo en su lugar?

reemplazar en el lugar

sedse envía con la bandera -i., Vamos a consultar man sed:

-i extension Edit files in-place, saving backups with the specified extension. 

Vamos a intentarlo:

tenga en cuenta que en los sistemas Linux, un espacio después de -i podría causar un error, por lo insteadof -i .bak, usted puede tratar de -i.bak.

por lo tanto,el contenido del archivo original se guarda en un nuevo archivo llamado .bak, y la nueva versión modificada está en el original greetings.txt. Ahora todo lo que tenemos que hacer es:

rm greetings.txt.bak 

y hemos cambiado el archivo en su lugar., Ahora eres el brindis de la oficina, cantado por bardos.

Vamos a llegar l33t

Espere, hay más en ese man entrada de sed -i:

If a zero-length extension is given, no backup will be saved. It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc. 

longitud Cero de extensión, eh? Usemos nuestro archivo original greetings.txt antes de cambiarlo:

el -i '' (o, en Linux, solo -i) le dice a sed que use un cero-longitud extensión para la copia de seguridad., Una extensión de longitud cero significa que la copia de seguridad tiene el mismo nombre que el archivo nuevo, por lo que no se crea ningún archivo nuevo. Elimina la necesidad de ejecutarrm después de realizar un reemplazo in situ.

no he encontrado ningún problema de espacio en disco con -i ''. Si está preocupado por la advertencia de la página man, puede usar la técnica -i .bak que menciono en la sección anterior.

Buscar y reemplazar en archivos múltiples

Nos gusta sed tanto que utilizamos en nuestros replace secuencia de comandos., Itworks como esto:

replace foo bar **/*.rb 

El primer argumento es la cadena que nos estamos encontrando. La segunda es la cadena con la que estamos reemplazando. El tercero es un patrón que coincide con la lista de archivos con los que queremos restringir nuestra búsqueda.