Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
sed
#1
Puedes ver una versión wiki de éste post en https://wiki.acosadores.net/doku.php?id=comandos:sed
Tutorial Sed


Autor/es: foro.acosadores.net


En éste tutorial trataremos de entender la parte más difícil y menos explicada de éste comando, si alguien puede y quiere explicarlo mejor que lo haga




El espacio de patrón y de retención, muy difícil de comprender sin explicarlo muy bien



sed@command:~$ cat lineas.txt

una

dos

tres

cuatro

cinco

seis

siete

ocho

nueve

diez

sed@command:~$




sed@command:~$ cat lineas2.txt (tiene un espacio al final de la última línea)
una
dos
tres
cuatro
cinco
seis
siete
ocho
nueve
diez

sed@command:~$

sed@command:~$ cat lineas.txt | sed '/./{H;d};x;' (como la condición /./ siempre se cumple nunca llega a ejecutar x y por eso no imprime nada
sed@command:~$
sed@command:~$ cat lineas2.txt | sed '/./{H;d};x;' (como el archivo al final contiene una línea en blanco /./ deja de cumplirse, pasa a la instrucción x y por eso imprime

una
dos
tres
cuatro
cinco
seis
siete
ocho
nueve
diez
sed@command:~$

El comando podría leerse algo así, if /./ { do{H;d}while(no linea en blanco);x }

Mientras la línea contiene algo ejecuta {H;d} (añade la línea del espacio de patron al de retención y la borra del espacio de patrón), y cuando no (la línea ultima en blanco) ejecuta x (intercambia las líneas almacenadas en el espacio de retención a patrón) y por eso las imprime todas


Etiquetas condicionales
si la línea coincide con el patron cuatro salta a la etiqueta z y sólo sustituye u por chu, sino sustituye u por mu y luego u por chu

sed@command:~$ sed '/cuatro/bz;s/u/mu/;:z;s/u/chu/' lineas.txt
mchuna
dos
tres
cchuatro
cinco
seis
siete
ocho
nmchueve
diez
sed@command:~$

Condicionales fáciles
-nE (imprime sólo lo que coincide y habilita el uso de expresiones regulares sin tener que escapar los caracteres con \)


sed@command:~$ sed -nE '/^.{4}$/p' lineas.txt (líneas que sólo tengan 4 caracteres)
tres
seis
ocho
diez
sed@command:~$ sed -nE '/^.{4}$/{n;p}' lineas.txt (n salta a la siguiente línea y p imprime)
cuatro
siete
nueve
once once
sed@command:~$ sed -nE '/^.{4}$/{n;n;p}' lineas.txt (salta 2 líneas e imprime)
cinco
ocho
sed@command:~$
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)