Tutorial de sed

La verdad es que más que un tutorial, parece un manual en toda regla. Empecé a escribirlo con la intención de no olvidar las cosas de sed cada vez que me paso un cierto tiempo sin usarlo (de ahí el nombre del archivo), pero me fue gustando redactarlo y le he ido ampliando más y más.

Alguno pensará que es absurdo hacer un manual de sed, cuando existen muchos en internet. Y sí, es verdad que existen, pero todos se reducen a enseñar un sed muy básico, tal como:

sed '/borra_esto/d' fichereo.txt


y no van mucho más allá. Por ejemplo, alguno que esté familiarizado con esos usos de sed, ¿sabría cómo extraer los destinatarios de una cabecera de correo? Recuerdo que si hay varios destinatarios es muy probable que se encuentren repartidos en distintas líneas, sólo la primera de las cuales presenta el campo 'To:'. Así que no basta con hacer:

sed '/^$/Q;/^To: /!d' fichero


que es a lo que se suelen reducir la mayoría de los tutoriales. Y aún con todo, esto es relativamente sencillo.

Yo en cambio he procurado profundizar mucho, de modo qué se conozca exactamente cómo actúa sed y cuáles son las estrategias que se deben seguir para resolver problemas más complicados... Porque se pueden resolver problemas más complicados:

El tutorial es largo. En caracteres tiene... ¿créeis que voy a usar 'wc -c'? Pues no, eso es de niñas ;-)

sef -f wcc.sed ~/Documentacion/TrucosConSed.txt
42622


Que forman un total en palabras de... ¿wc -w? Por favor, por favor, que estáis hablando con un auténtico hombre:

sed -f wcw.sed ~/Documentacion/TrucosConSed.txt
6540


Como soy un poco repetitivo, he dicho las palabras órden u ordenes:

sed -f wcexp.sed ~/Documentacion/TrucosConSed.txt
41


En fin, no son cosas muy, muy útiles pero dan una idea de las capacidades "ocultas" de sed, que a fin de cuentas es un simple editor de flujo que se dedica a hacer sustituciones de texto. Nada más, pero nada menos.

Por último, si ahora (para probaros) preguntase cuánto suman los 42622 caracteres del texto, más sus 6540 palabras, más las 41 veces que he repetido órden/es, más las doce horas que me ha podido llevar escribirlo, os podría catalogar en:

gárrulo: suma usando lápiz y papel.

aprendiz: suma usando xcalc (o la calculadora de windows ¡arghhh!).

aprendiz hortera: suma usando excell.

listillo: suma usando bc:
echo "42622+6540+41+12" | bc
49215


friqui: suma con sed, porque los auténticos friquis sumamos con sed:
echo "42622+6540+41+12" | sed -f sumame.sed
49215


Juro que no está amañado... Se me ha ocurrido un algoritmo para sumar con sed. Hasta me he quedado sorprendido de que se pueda hacer con simples busca y reemplaza (sed no tiene variables, ni operaciones aritméticas, ni todas esas cosas que tienen los lenguajes de programación). Aún tengo que buscar por internet a ver si alguien lo habia hecho antes. Supongo que sí: hay muchísima gente en este mundo como un auténtico cencerro...

Bueno, pues todo está en el tutorial. Y bastantes cosas más como trasponer matrices, por ejemplo.

¡Que aproveche! Si es que le aprovecha a alguno. Si me mandáis alguna corrección mejor que mejor.

PD: Creo que le debo a bpeople desde hace dos meses las correcciones de mi tutorial de vim... ¡ejem! no me he olvidado, pero me da una pereza... Cuando lo quieras mándame una bronca en privado y lo haré. A mí, como no se me hable a palos...

Bueno, pues me es imposible adjuntar el fichero: no sé por qué narices no me deja. Dentro de un rato edito y pruebo a ver.

Adjuntos

tutosed.zip (14.96 KB)

Tutorial de sed
¡Uis! Siento mucho el estropicio... A ver si borrar toda la basura restante
Lejos de querer fastidiar, pero podías haberle hecho un "| uniq" a los posts :D así en lugar de tener 4 tendríamos uno.

PD: A ver si arreglan ya los hilos fantasmas.

PD2: a la espera del mentado manual

Salu2.Ferdy
Escrito originalmente por Ferdy
Lejos de querer fastidiar, pero podías haberle hecho un "| uniq" a los posts :D así en lugar de tener 4 tendríamos uno.


¿uniq? Por favor, por favor, que este hilo trata de sed:

$ cat los_mensajes | sed -f - <<  "FIN"
$b
N
/^\([^\n]\)*\n\1/!P
D
FIN


Mmm... podía haberlo incluido en el manual en la sección de emulación de comandos unix...

PD2: a la espera del mentado manual


Pues a ver, he estado un rato intentándolo (media hora fácilmente y me ha sido imposible). Incluiso lo he comprimido en un zip por si pudiese haber problemas con los .gz, pero ni por esas.

De hecho, acabo de intentar adjuntarlo a este mensaje y tampoco.
Escrito originalmente por auxiliar
Cuando lo quieras mándame una bronca en privado y lo haré. A mí, como no se me hable a palos...


Oido cocina. [jaja]

Saludos.
Muy buen tutorial, lo he estado mirando por encima y me parece bastante bueno ;-) Lo imprimiré ahora y luego a sacarle provecho .

Gracias, un saludo
Casi seis años después, resubo el tutorial de sed a petición de un forero, que debio borrarse por algún percance. Está en el primer mensaje del hilo.
Pues casi 6 años después un servidor le va a echar un buen vistazo a ese manual a ver si me empapo, que sed es una de esas herramientas que cada vez que me da por usarla tengo que estar como mínimo 20 minutos buscando y leyendo (o releyendo) documentación. Gracias por el manual.

Un saludo.
Einy escribió:Pues casi 6 años después un servidor le va a echar un buen vistazo a ese manual a ver si me empapo, que sed es una de esas herramientas que cada vez que me da por usarla tengo que estar como mínimo 20 minutos buscando y leyendo (o releyendo) documentación. Gracias por el manual.

Un saludo.


Recuerdo que no es un manual de expresiones regulares, que es a lo mejor lo que andas buscando. Pero manuales de expresiones regulares hay a patadas por internet.
No, no, las expresiones regulares son otra cosa que me costó años ser capaz de retener, pero ya están (más o menos) controladas, es que no sé que tengo en contra de sed o sed en contra mía, que cada vez que voy a usarlo para algo un poco "complicado" me monto un lío de la ostia XD .

Un saludo.
Googleando me he encontrado este reflote que me viene de maravilla, he estado mirando el manual y no logro descifrar lo que hace un programa que tengo.

la llamada se hace desde un ".bat" de esta manera: sed.exe -f c:\Temp\condicion.sed C:\Temp\mailtmp.txt > C:\Temp\mail.txt

Vamos, que se pone como entrada mailtmp.txt y con condicion.sed creamos mail.txt

Dentro de condicion.sed tenemos esto que no se lo que hace: 1,$ s/\\/|/g (desde la primera a la ultima linea..... que sustituye?)

Gracias
\ ----------> |

Es la expresión regular más sencilla, quizá te hayan confundido los dos \\ juntos, el primero de ellos es un caracter de escape.

Saludos:).
Entonces lo unico que hace es cambiar las \ por / de todo el archivo?

Edito: Ahora lo veo claro, cambia todos los caracteres "\" por "|"
13 respuestas