![]() |
|
sed - Printable Version +- Forums (https://foro.acosadores.net) +-- Forum: Comandos Linux (https://foro.acosadores.net/forumdisplay.php?fid=19) +--- Forum: Otros comandos (https://foro.acosadores.net/forumdisplay.php?fid=21) +--- Thread: sed (/showthread.php?tid=21) |
sed - truper - 12-25-2024 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:~$ |