Estos son los sed
comandos , ciertamente crípticos . Específicamente (de man sed
):
: etiqueta
Etiqueta para los comandos byt.
t etiqueta
Si como /// ha realizado una sustitución exitosa desde que se leyó la última línea de entrada y desde el último comando t o T, bifurque a etiqueta; Si se omite la etiqueta, bifurca hasta el final del guión.
n N Lee / agrega la siguiente línea de entrada en el espacio del patrón.
Por lo tanto, el script que publicó puede desglosarse en (espacios agregados para facilitar la lectura):
sed ':a; $!N; s/\n/string/; ta'
--- ---- ------------- --
| | | |--> go back (`t`) to `a`
| | |-------------> substitute newlines with `string`
| |----------------------> If this is not the last line (`$!`), append the
| next line to the pattern space.
|----------------------------> Create the label `a`.
Básicamente, lo que está haciendo podría escribirse en pseudocódigo como
while (not end of line){
append current line to this one and replace \n with 'string'
}
Puede entender esto un poco mejor con un ejemplo de entrada más complejo:
$ printf "line1\nline2\nline3\nline4\nline5\n" | sed ':a;$!N;s/\n/string/;ta'
line1stringline2stringline3stringline4stringline5
No estoy realmente seguro de por qué !$
se necesita. Por lo que puedo decir, puedes obtener la misma salida con
printf "line1\nline2\nline3\nline4\nline5\n" | sed ':a;N;s/\n/string/;ta'