La sintaxis de los comandos de sed que componen un script es la siguiente:
[ámbito][ ]comando[parámetros]
El ámbito de un comando sirve para especificar las líneas del flujo de entrada en las que se ejecutará, funcionan como un condicional que tiene que cumplirse para que actúe el comando. Es opcional, y si no lo indicamos, el comando se ejecutará para todas las líneas.
El comando es una sola letra que normalmente está relacionada con la inicial de la palabra en inglés que indica lo que hace. Opcionalmente podemos separar el ámbito del comando con espacios, pero si lo preferimos, podemos ponerlos juntos.
Los parámetros de un comando representan distintas informaciones que se necesitan para su ejecución y van a depender del comando en concreto. Los parámetros suelen ir pegados al comando, es lo habitual, pero puede haber separación en algunos casos.
$ sed 's/^/-/' f g
-uno
-dos
-tres
-cuatro
En el ejemplo anterior, el comando s (sustitución) no lleva ámbito, por lo que se aplica a todas las líneas, y los argumentos son '/^/-/'.
$ sed '3,4 s/^/-/' f g
uno
dos
-tres
-cuatro
En este último ejemplo, sí hay ámbito, el valor '3,4', que indica las líneas desde la número 3 hasta la 4, es por eso por lo que el comando s solo se ha aplicado a las líneas que han cumplido con la condición del ámbito. En el caso de las líneas 1 y 2, al no ejecutarse ningún comando, la zona de trabajo no se ha modificado, y el último paso del ciclo saca por la salida estándar la línea tal como entró. Es importante darse cuenta de que el ciclo se ha ejecutado para cada una de las líneas del flujo de entrada, solo que unas líneas han sufrido modificaciones y otras no. Por lo demás, todo es igual que anteriormente, el comando es s y los argumentos '/^/-/'.
Algunos ejemplos más para reflexionar:
$ sed -n '3,4s/^/-/ ; 1,2p' f g
uno
dos
$ sed -n -e '3,4s/^/-/ ; 3,4p' f g
-tres
-cuatro
$ sed -n -e '3,4{s/^/-/ ; p}' f g
-tres
-cuatro
Con el comando s si se hubiese separado el nombre del comando de los argumentos hubieramos obtenido un mensaje de error:
$ sed '3,4 s /^/-/' f g
sed: -e expresión #1, carácter 11: orden `s' sin terminar