La sintaxis del comando r (read) es la siguiente:
r fichero
El objetivo es enviar a la salida estándar al final del ciclo el fichero indicado (si no existe se trata como fichero un vacío), sin pasar por la zona de trabajo.
$ cat muebles
mesa
silla
armario
$ sed '/o/r muebles' f
uno
mesa
silla
armario
dos
mesa
silla
armario
tres
En cada ciclo del ámbito del comando r el fichero se abre, se lee y se cierra. El ámbito puede ser un rango, siendo esto una extensión de GNU.
Todo lo que va a la derecha del nombre del comando se considera el nombre del fichero, por lo que para poner un comando a continuación se debe hacer en otra opción -e o bien en otra línea del script.
$ sed -e '/o/r muebles' -e 's/^/-/' f
-uno
mesa
silla
armario
-dos
mesa
silla
armario
-tres
También como extensión GNU, se puede utilizar el nombre de fichero /dev/stdin para hacer referencia a la entrada estándar.
$ seq 3 | sed -e '/o/r /dev/stdin' f
uno
1
2
3
dos
tres
Como vemos, durante el primer ciclo del ámbito del comando r, la entrada estándar se lee y se cierra, pero para los siguientes ciclos ya no hay información, por eso no se envía nada después de la línea "dos", a partir del segundo ciclo la entrada estándar está vacía.
Los comandos a y r tienen el mismo objetivo, se diferencian en que con el primero hay que expecificar el texto y con el segundo el texto está en un fichero.