<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>LuAuF</title>
	
	<link>http://luauf.com</link>
	<description />
	<lastBuildDate>Fri, 27 Jan 2012 01:44:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/luauf" /><feedburner:info uri="luauf" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by/2.5/</creativeCommons:license><feedburner:emailServiceId>luauf</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Ayuda memoria: loops infinitos en el shell</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/n12OApAFwt4/</link>
		<comments>http://luauf.com/2012/01/26/ayuda-memoria-loops-infinitos-en-el-shell/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 01:44:47 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[bucle]]></category>
		<category><![CDATA[infinito]]></category>
		<category><![CDATA[ksh]]></category>
		<category><![CDATA[LOOP]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1197</guid>
		<description><![CDATA[Este blog, me ha sido en más de una ocasión, mi ayuda memoria ideal. En otras tantas ocasiones, un link al mismo me permitió &#8220;ayudar al prójimo&#8221;, más bien, ahorrarme tiempo de utilización de cuerdas vocales y ahorrar al otro el fastidio de escucharme. Por tal motivo, y ante un requerimiento del primer tipo (como [...]]]></description>
			<content:encoded><![CDATA[<p>Este blog, me ha sido en más de una ocasión, mi ayuda memoria ideal. En otras tantas ocasiones, un link al mismo me permitió &#8220;ayudar al prójimo&#8221;, más bien, ahorrarme tiempo de utilización de cuerdas vocales y ahorrar al otro el fastidio de escucharme.</p>
<p>Por tal motivo, y ante un requerimiento del primer tipo (como &#8220;ayuda memoria&#8221;) quiero publicar algo que frecuentemente utilizo (o que cuando no es tan frecuente mi fragil memoria olvida):</p>
<p><strong>¿Cómo hacer un loop infinito en un intérprete de comandos (sh, ksh o similar)?</strong></p>
<p>Pongamos unas comillas al &#8220;infinito&#8221;, todo concluye al fin, nada puede escapar a un <strong>Ctrl+C</strong> o a un break (produce un abandono inmediato) dentro del bucle.</p>
<p><span id="more-1197"></span></p>
<pre>while :; do
  # Todo lo que quieras repetir infinitas veces
  echo "Hola Mundo"
  sleep 2
done</pre>
<p>No olvides el sleep, sino pasarán cosas muy rápido <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Otras opciones son utilizar las <em>palabras especiale</em>s <strong>true</strong> (indica que una condición en verdadera) y <strong>false</strong> (indica que una condición es falsa) de<strong> bash</strong>:</p>
<pre>while true; do
  ...
  ...
done</pre>
<p>O:</p>
<pre>until false; do
  ...
  ...</pre>
<pre>done</pre>
<img src="http://feeds.feedburner.com/~r/luauf/~4/n12OApAFwt4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2012/01/26/ayuda-memoria-loops-infinitos-en-el-shell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://luauf.com/2012/01/26/ayuda-memoria-loops-infinitos-en-el-shell/</feedburner:origLink></item>
		<item>
		<title>Exportar una base de datos MDB a SQL (mysql, oracle, sybase, etc.)</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/6MzG6H18oas/</link>
		<comments>http://luauf.com/2011/09/12/exportar-una-base-de-datos-mdb-a-sql-mysql-oracle-sybase-etc/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 02:00:38 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[access]]></category>
		<category><![CDATA[exportar]]></category>
		<category><![CDATA[mdb]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Postgres]]></category>
		<category><![CDATA[sybase]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1193</guid>
		<description><![CDATA[Recuerdo instantes de mi pasado donde he tenido la necesidad de llevar Bases de Datos MDB, Microsoft Access, a bases de datos MySQL. Recuerdo por entonces MySQL Migration Toolkit, una herramienta para realizar esta carga requerida. No obstante no era de mi agrado, y lo que buscaba por entonces era simplemente obtener un script SQL [...]]]></description>
			<content:encoded><![CDATA[<p>Recuerdo instantes de mi pasado donde he tenido la necesidad de llevar Bases de Datos MDB, Microsoft Access, a bases de datos MySQL.</p>
<p>Recuerdo por entonces MySQL Migration Toolkit, una herramienta para realizar esta carga requerida. No obstante no era de mi agrado, y lo que buscaba por entonces era simplemente obtener un script SQL con el código DDL y DML necesario para el CREATE de los objetos de la base de datos y los INSERTs de los datos. A esa utilidad, hoy Linuxeando, le encontré el nombre: <strong><a href="http://mdbtools.sourceforge.net/">mdbtools</a></strong>.</p>
<p>MDBtools es un suite de herramientas (mdb-array mdb-header mdb-parsecsv mdb-schema mdb-tables mdb-export mdb-hexdump mdb-prop mdb-sql mdb-ver) que permiten, entre sus funciones, obtener  esquema de una base de datos y exportar en SQL los datos de la misma.</p>
<p><span id="more-1193"></span>Veamos un ejemplo básico y sencillo que consiste en:</p>
<ul>
<li>Exportar el diseño de la vieja y querida Neptuno.mdb (conocida base de datos distribuida como ejemplo con Microsoft Access) en formato de sentencias de definición de datos SQL.</li>
<li>Obtener el nombre de las tablas de la misma base de datos</li>
<li>Exportar los datos de cada tabla bajo la forma de INSERTs SQL.</li>
</ul>
<div class="syntax_hilite">
<div id="code-2">
<div class="code">$ sudo aptitude install mdbtools</p>
<p>$ mdb-schema Neptuno.<span style="">mdb</span> mysql&amp;gt; Neptuno_schema.<span style="">sql</span> #donde mysql se puede reemplazar por otro dialecto: oracle, sybase o postgres.</p>
<p>$ for tabla in `cat Neptuno_tables.<span style="">txt</span>`; do mdb-export -R \; -I Neptuno.<span style="">mdb</span> $<span style="color:#006600; font-weight:bold;">&#123;</span>tabla<span style="color:#006600; font-weight:bold;">&#125;</span>; done&amp;gt; Neptuno_data.<span style="">sql</span></p>
<p>$ rm Neptuno_tables.<span style="">txt</span></div>
</div>
</div>
<p></p>
<p>Fácil, sencillo y util... lástima que en mi caso llega tarde, no obstante en conocimiento perdura y nadie puede asegurarme que no me encuentre alguna vieja MDB en mi camino.</p>
<p>Vía: <a href="http://www.wikipeando.com/index.php/archives/481">Wikipeando</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/6MzG6H18oas" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2011/09/12/exportar-una-base-de-datos-mdb-a-sql-mysql-oracle-sybase-etc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://luauf.com/2011/09/12/exportar-una-base-de-datos-mdb-a-sql-mysql-oracle-sybase-etc/</feedburner:origLink></item>
		<item>
		<title>¿Cómo conectarse a MySQL desde un programa en C?</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/NhUS4VgjhzU/</link>
		<comments>http://luauf.com/2011/07/09/%c2%bfcomo-conectarse-a-mysql-desde-un-programa-en-c/#comments</comments>
		<pubDate>Sat, 09 Jul 2011 18:01:54 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[librerias]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1192</guid>
		<description><![CDATA[La respuesta al título de esta publicación es muy sencilla, conectarse a MySQL desde C se realiza mediante una API provista por el mismo proveedor de base de datos. La API de C es ditribuida con MySQL, no es más que una librería (libmysqlclient) que interfacea entre el programa y la base de datos. La [...]]]></description>
			<content:encoded><![CDATA[<p>La respuesta al título de esta publicación es muy sencilla, conectarse a MySQL desde C se realiza mediante una API provista por el mismo proveedor de base de datos.</p>
<p>La API de C es ditribuida con MySQL, no es más que una librería (libmysqlclient) que interfacea entre el programa y la base de datos.</p>
<p>La documentación provista por MySQL es muy completa (<a href="http://dev.mysql.com/doc/refman/5.0/en/c.html">MySQL C API</a>), no obstante, fiel a nuestra costumbre iremos a un ejemplo sencillo y concreto.</p>
<p><span id="more-1192"></span>¿Qué necesitamos?</p>
<ul>
<li>Un servidor de base de datos MySQL, al cual conectarnos</li>
<li>Un programa cliente</li>
<li>La librería mysqlclient</li>
<li>mysql-devel, headers con la firma de la librería</li>
<li>gcc</li>
</ul>
<p>Con cualquier variante de UNIX más la instalación manual de la distribución binaria (tar.gz) tendremos todo lo que necesitamos. Caso contrario habrá que instalar los paquetes necesarios que incluya los requisitos mencionados, por ejemplo <strong>mysql-devel</strong>.</p>
<p>Primero, sin ir al detalle en concreto de cada línea (no cuesta nada interpretar el código, pues está bien comentado) veamos el siguiente fuente:</p>
<div class="syntax_hilite">
<div id="c-4">
<div class="c"><span style="color: #808080; font-style: italic;">/* mi_cliente */</span><br />
<span style="color: #339933;">#include &lt;mysql.h&gt;</span><br />
<span style="color: #339933;">#include &lt;stdio.h&gt;</span></p>
<p>main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp;MYSQL *conn;<br />
&nbsp; &nbsp;MYSQL_RES *res;<br />
&nbsp; &nbsp;MYSQL_ROW row;</p>
<p>&nbsp; &nbsp;<span style="color: #993333;">char</span> *server = <span style="color: #ff0000;">"localhost"</span>;<br />
&nbsp; &nbsp;<span style="color: #993333;">char</span> *user = <span style="color: #ff0000;">"root"</span>;<br />
&nbsp; &nbsp;<span style="color: #993333;">char</span> *password = <span style="color: #ff0000;">"PASSWORD"</span>; <span style="color: #808080; font-style: italic;">/* set me first */</span><br />
&nbsp; &nbsp;<span style="color: #993333;">char</span> *database = <span style="color: #ff0000;">"mysql"</span>;</p>
<p>&nbsp; &nbsp;conn = mysql_init<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span>;</p>
<p>&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">/* Connect to database */</span><br />
&nbsp; &nbsp;<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!mysql_real_connect<span style="color: #66cc66;">&#40;</span>conn, server,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;user, password, database, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">NULL</span>, <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; fprintf<span style="color: #66cc66;">&#40;</span>stderr, <span style="color: #ff0000;">"%s<span style="color: #000099; font-weight: bold;">\n</span>"</span>, mysql_error<span style="color: #66cc66;">&#40;</span>conn<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; exit<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">/* send SQL query */</span><br />
&nbsp; &nbsp;<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>mysql_query<span style="color: #66cc66;">&#40;</span>conn, <span style="color: #ff0000;">"show tables"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; fprintf<span style="color: #66cc66;">&#40;</span>stderr, <span style="color: #ff0000;">"%s<span style="color: #000099; font-weight: bold;">\n</span>"</span>, mysql_error<span style="color: #66cc66;">&#40;</span>conn<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; exit<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp;res = mysql_use_result<span style="color: #66cc66;">&#40;</span>conn<span style="color: #66cc66;">&#41;</span>;</p>
<p>&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">/* output table name */</span><br />
&nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"MySQL Tables in mysql database:<span style="color: #000099; font-weight: bold;">\n</span>"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;<span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>row = mysql_fetch_row<span style="color: #66cc66;">&#40;</span>res<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> != <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"%s <span style="color: #000099; font-weight: bold;">\n</span>"</span>, row<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;</p>
<p>&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">/* close connection */</span><br />
&nbsp; &nbsp;mysql_free_result<span style="color: #66cc66;">&#40;</span>res<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;mysql_close<span style="color: #66cc66;">&#40;</span>conn<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Ahora si veamos la parte más interesa saber ¿cómo compilar?</p>
<p>Entre los argumentos a pasarle al gcc tenemos los directorios con las librerías, las librerías propiamente dichas, los directorios de encabezados (.h), y otras opciones más del compilador. Esto no representa ningún problema, menos aún con <a href="http://dev.mysql.com/doc/refman/5.0/en/mysql-config.html. mysql_config">mysql_config</a>  es un pequeño utilitario de MySQL que provee información para el compilador.</p>
<p>De esta forma:</p>
<ul>
<li><strong>mysql_config --libs</strong>: devuelve los path de las librerías y las librerías propiamente dichas a linkear.</li>
<li><strong>mysql_config --cflags</strong>: devuelve, entre otros argumentos, los path de los headers.</li>
</ul>
<p>Finalmente, podemos compilar de esta manera tan sencilla:</p>
<pre>$ gcc -o mi_cliente $(mysql_config --cflags) mi_cliente.c $(mysql_config --libs)</pre>
<p>Y luego ejecutar:</p>
<pre>$ ./mi_cliente</pre>
<p>Realmente, muy sencillo ¿no?</p>
<p>Vía: <a href="http://www.cyberciti.biz/tips/linux-unix-connect-mysql-c-api-program.html">nixCraft</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/NhUS4VgjhzU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2011/07/09/%c2%bfcomo-conectarse-a-mysql-desde-un-programa-en-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://luauf.com/2011/07/09/%c2%bfcomo-conectarse-a-mysql-desde-un-programa-en-c/</feedburner:origLink></item>
		<item>
		<title>Ya falta menos para Gnome 3</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/B3rI8AG9OKs/</link>
		<comments>http://luauf.com/2011/01/26/ya-falta-menos-para-gnome-3/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 00:54:37 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[gnome shell]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1185</guid>
		<description><![CDATA[En medio de las vacaciones de verano del hemisferio sur, y entre tantas pobres noticias del mercado futbolero y automotriz; aparece en mis feeds GNOME 3 - Made of Easy. Fue esa lectura la que me hizo recordar de Gnome 3, la esperada novedad que debería salir a la luz no antes de Abril del [...]]]></description>
			<content:encoded><![CDATA[<p>En medio de las vacaciones de verano del hemisferio sur, y entre tantas pobres noticias del mercado futbolero y automotriz; aparece en mis feeds <a href="http://gnome3.org/">GNOME 3 - Made of Easy</a>. Fue esa lectura la que me hizo recordar de Gnome 3, la esperada novedad que debería salir a la luz no antes de Abril del presente año... aunque de ahí a que llegue a las principales distros de Linux habrá que esperar algo más.</p>
<p><em>"El nuevo escritorio de GNOME eleva la elegancia a un nuevo nivel. Simple, bello, GNOME3 ha &lt;barrido&gt; el desorden existente para llegar a un escritorio sencillo, simple, facil de usar y más hermoso que nunca; con nuevo tema, nueva fuente y animaciones cuidadas."</em></p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2011/01/window-picker.png"><img class="aligncenter size-medium wp-image-1190" title="window-picker" src="http://luauf.com/wp-content/uploads/2011/01/window-picker-300x225.png" alt="" width="300" height="225" /></a></p>
<p>No obstante, ansioso, sin poder esperar su lanzamiento hice lo mismo que había echo tiempo atrás, <a href="http://gnome3.org/tryit.html">Try it out</a>!. El proceso es sencillo, bajar los fuentes y compilar... cosa que está bien <a href="http://live.gnome.org/GnomeShell#building">aqui</a>, que se resume en pocos pasos y que de no mediar problemas, <strong>apt-get install</strong>'s de por medio se resume en:</p>
<p><span id="more-1185"></span></p>
<ul>
<li>curl -O http://git.gnome.org/browse/gnome-shell/plain/tools/build/gnome-shell-build-setup.sh</li>
<li>/bin/bash gnome-shell-build-setup.sh</li>
<li>sudo rm -rf /usr/lib*/*.la</li>
<li>jhbuild build</li>
</ul>
<p>Finalmente, para ejecutar el nuevo shell:</p>
<ul>
<li>cd ~/gnome-shell/source/gnome-shell/src</li>
<li>sudo ./gnome-shell --replace</li>
</ul>
<p>Luego de eso, deberiamos poder empezar a disfrutar de un entorno nuevo, sencillo, cuidado y que representa la principal innovación en GNOME en años.</p>

<a href='http://luauf.com/2011/01/26/ya-falta-menos-para-gnome-3/app-picker/' title='app-picker'><img width="150" height="150" src="http://luauf.com/wp-content/uploads/2011/01/app-picker-150x150.png" class="attachment-thumbnail" alt="app-picker" title="app-picker" /></a>
<a href='http://luauf.com/2011/01/26/ya-falta-menos-para-gnome-3/overview-big/' title='overview-big'><img width="150" height="150" src="http://luauf.com/wp-content/uploads/2011/01/overview-big-150x150.png" class="attachment-thumbnail" alt="overview-big" title="overview-big" /></a>
<a href='http://luauf.com/2011/01/26/ya-falta-menos-para-gnome-3/search-big/' title='search-big'><img width="150" height="150" src="http://luauf.com/wp-content/uploads/2011/01/search-big-150x150.png" class="attachment-thumbnail" alt="search-big" title="search-big" /></a>
<a href='http://luauf.com/2011/01/26/ya-falta-menos-para-gnome-3/search-results/' title='search-results'><img width="150" height="150" src="http://luauf.com/wp-content/uploads/2011/01/search-results-150x150.png" class="attachment-thumbnail" alt="search-results" title="search-results" /></a>
<a href='http://luauf.com/2011/01/26/ya-falta-menos-para-gnome-3/window-picker/' title='window-picker'><img width="150" height="150" src="http://luauf.com/wp-content/uploads/2011/01/window-picker-150x150.png" class="attachment-thumbnail" alt="window-picker" title="window-picker" /></a>

<img src="http://feeds.feedburner.com/~r/luauf/~4/B3rI8AG9OKs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2011/01/26/ya-falta-menos-para-gnome-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://luauf.com/2011/01/26/ya-falta-menos-para-gnome-3/</feedburner:origLink></item>
		<item>
		<title>Borrar los archivos de más de N días (en Windows)</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/pGvn8Fng2BQ/</link>
		<comments>http://luauf.com/2010/12/04/borrar-los-archivos-de-mas-de-n-dias-en-windows/#comments</comments>
		<pubDate>Sat, 04 Dec 2010 19:19:03 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[bat]]></category>
		<category><![CDATA[borrar archivos]]></category>
		<category><![CDATA[purgar]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell script]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1184</guid>
		<description><![CDATA[Las publicaciones al blog son cada vez más esporádicas, no por eso poco importantes. Es decir, aveces prefiero publicar poco y útil antes que periódico e inservible. En este caso, quiero aportar a este blog (mi humilde base de conocimientos) una forma muy sencilla de eliminar archivos de más de N de días de antigüedad [...]]]></description>
			<content:encoded><![CDATA[<p>Las publicaciones al blog son cada vez más esporádicas, no por eso poco importantes. Es decir, aveces prefiero publicar poco y útil antes que periódico e inservible.</p>
<p>En este caso, quiero aportar a este blog (mi humilde base de conocimientos) una forma muy sencilla de eliminar archivos de más de N de días de antigüedad en forma automática (ideal para ejecutar por el programador de tareas), algo muy útil para purgar logs o borrar temporales inútiles. En mi caso, fue utilizado para eliminar imágenes periódicas de una cámara IP (JPEG posting) que al final del día unía en un video diario.</p>
<p>Luego de buscar y buscar y estando a punto de escribir un Windows shell script bastante artesanal me encontré con <a href="http://ss64.com/nt/forfiles.html">FORFILES</a>, un <a href="http://ss64.com/nt/">comando de Windows</a>, que permite de una forma sencilla de seleccionar uno o más archivos y ejecutar un comando sobre los mismos.</p>
<p><span id="more-1184"></span><br />
Está de más decir que lo primero que deberías hacer es ver como funciona FORFILES:</p>
<div class="syntax_hilite">
<div id="code-7">
<div class="code">forfiles /?</div>
</div>
</div>
<p></p>
<p>De todas formas, si eres algo perezoso, aquí va la solución al problema que da título a esta presentación:</p>
<div class="syntax_hilite">
<div id="code-8">
<div class="code">forfiles -p <span style="color:#CC0000;">"C:<span style="color:#000099; font-weight:bold;">\d</span>onde<span style="color:#000099; font-weight:bold;">\e</span>sten<span style="color:#000099; font-weight:bold;">\t</span>us<span style="color:#000099; font-weight:bold;">\a</span>rchivos"</span> -s -m *.* -d &lt;cantidad de dias&gt; -c <span style="color:#CC0000;">"cmd /c del @path"</span></div>
</div>
</div>
<p></p>
<p>Vía: <a href="http://stackoverflow.com/questions/51054/batch-file-to-delete-files-older-than-n-days">stackoverflow</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/pGvn8Fng2BQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/12/04/borrar-los-archivos-de-mas-de-n-dias-en-windows/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://luauf.com/2010/12/04/borrar-los-archivos-de-mas-de-n-dias-en-windows/</feedburner:origLink></item>
		<item>
		<title>Hojas de referencia de comandos de UNIX, vi/vim, etc.</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/Qf_zfPcJqKo/</link>
		<comments>http://luauf.com/2010/09/27/hojas-de-referencia-de-comandos-de-unix-vivim-etc/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 11:00:14 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[cheat sheet]]></category>
		<category><![CDATA[Comandos]]></category>
		<category><![CDATA[hojas de referencia]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[rgb]]></category>
		<category><![CDATA[vi]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1178</guid>
		<description><![CDATA[Y un día volví... y como no podía ser de otra manera con las clásicas hojas de referencia, para imprimir y tener a nuestro lado en los escritorios. Como lo más destacado de este post, les dejo una cheatsheet de comandos de UNIX. Y como plus, algunas cheatsheet varias, de esas que encontrarás miles en [...]]]></description>
			<content:encoded><![CDATA[<p>Y un día volví... y como no podía ser de otra manera con las clásicas hojas de referencia, para imprimir y tener a nuestro lado en los escritorios.</p>
<p>Como lo más destacado de este post, les dejo una cheatsheet de comandos de UNIX.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/09/unix_commands_cheatsheet.jpg"><img class="aligncenter size-thumbnail wp-image-1179" title="unix_commands_cheatsheet" src="http://luauf.com/wp-content/uploads/2010/09/unix_commands_cheatsheet-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p style="text-align: center;">
<p><span id="more-1178"></span>Y como plus, algunas cheatsheet varias, de esas que encontrarás miles en Internet. Son una hoja de referencia de vi/vim (a menos que trabajes hace tiempo con vi o vim, esta hoja te será muy útil inclusive para saber como salir del editor <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/09/vi-vim-cheat-sheet.gif"><img class="aligncenter size-medium wp-image-1180" title="vi-vim-cheat-sheet" src="http://luauf.com/wp-content/uploads/2010/09/vi-vim-cheat-sheet-300x212.gif" alt="" width="300" height="212" /></a></p>
<p>Y además, otras dos hojas acerca de las equivalencias en colores RGB/Hexadecimal (para imprimir a colores) y otra de JQuery, estas últimas dos para webmasters por sobre todas las cosas.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/09/rgb-hex-cheat-sheet-v1.png"><img class="aligncenter size-medium wp-image-1181" title="rgb-hex-cheat-sheet-v1" src="http://luauf.com/wp-content/uploads/2010/09/rgb-hex-cheat-sheet-v1-220x300.png" alt="" width="220" height="300" /></a></p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/09/Jquery-Cheat-Sheet-1.2.png"><img class="aligncenter size-medium wp-image-1182" title="Jquery-Cheat-Sheet-1.2" src="http://luauf.com/wp-content/uploads/2010/09/Jquery-Cheat-Sheet-1.2-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Vía: <a href="http://www.pixelbeat.org/cmdline.html">PixelBeat</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/Qf_zfPcJqKo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/09/27/hojas-de-referencia-de-comandos-de-unix-vivim-etc/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://luauf.com/2010/09/27/hojas-de-referencia-de-comandos-de-unix-vivim-etc/</feedburner:origLink></item>
		<item>
		<title>Usar discos reales en Virtualbox</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/YWxXhukzUSY/</link>
		<comments>http://luauf.com/2010/05/10/usar-discos-reales-en-virtualbox/#comments</comments>
		<pubDate>Mon, 10 May 2010 11:00:50 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[Virtualización]]></category>
		<category><![CDATA[virtual box]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1176</guid>
		<description><![CDATA[Un tip para tener a mano que resuelve las siguientes dos cuestiones: Virtualizar un Sistema Operativo ya instalado en una partición existente Crear un nuevo disco virtual en Virtualbox que apunte a una partición, sobre la cual se instalará un Sistema Operativo (desde una máquina virtual) y que luego se utilizará sin virtualizar. Bien, para [...]]]></description>
			<content:encoded><![CDATA[<p>Un tip para tener a mano que resuelve las siguientes dos cuestiones:</p>
<ul>
<li>Virtualizar un Sistema Operativo ya instalado en una partición existente</li>
</ul>
<ul>
<li>Crear un nuevo disco virtual en Virtualbox que apunte a una partición, sobre la cual se instalará un Sistema Operativo (desde una máquina virtual) y que luego se utilizará sin virtualizar.</li>
</ul>
<p><span id="more-1176"></span>Bien, para uno u otro fin necesitamos crear un disco virtual (<strong>.vmdk</strong>) pero que "apunte" a una partición real. Para el primer objetivo la partición existe y ya tiene un Sistema Operativo instalado. Para el segundo objetivo debemos, al menos, crear la partición (sin necesidad de formatear ni nada, simplemente crear la partición, puedes valerte de Gparted para esta tarea).</p>
<p>Finalmente, creamos el "link":</p>
<p>$ VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -relative -register</p>
<p>Vía: <a href="http://crysol.org/es/node/1275">CRySoL</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/YWxXhukzUSY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/05/10/usar-discos-reales-en-virtualbox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://luauf.com/2010/05/10/usar-discos-reales-en-virtualbox/</feedburner:origLink></item>
		<item>
		<title>¿Como conocer mi IP privada y mi IP pública?</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/54nbYYhZPyI/</link>
		<comments>http://luauf.com/2010/04/24/%c2%bfcomo-conocer-mi-ip-privada-y-mi-ip-publica/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 02:07:31 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cut]]></category>
		<category><![CDATA[ifconfig]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[ip privada]]></category>
		<category><![CDATA[ip publica]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[shell script]]></category>
		<category><![CDATA[Shell scripts]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1173</guid>
		<description><![CDATA[¿Como conocer mi IP privada y mi IP pública?, esa es la cuestión. Vamos a ver un pequeño script para lograr este propósito utilizando algunos comandos ya vistos y utilizados en la historia de este blog con varios distintos propósitos (ifconfig, grep, cut, awk, wget, sed) Primero, para obtener mi IP local (privada) puedo hacerlo [...]]]></description>
			<content:encoded><![CDATA[<p>¿Como conocer mi IP privada y mi IP pública?, esa es la cuestión.</p>
<p>Vamos a ver un pequeño script para lograr este propósito utilizando algunos comandos ya vistos y utilizados en la historia de este blog con varios distintos propósitos (<a href="http://luauf.com/2009/03/26/ejemplos-de-como-configurar-la-interfaz-de-red-mediante-ifconfig/">ifconfig</a>, <a href="http://luauf.com/2009/05/04/varios-ejemplos-de-uso-del-comando-grep/">grep</a>, <a href="http://luauf.com/2009/04/12/descargar-videos-de-youtube-de-la-forma-mas-facil/">cut</a>, <a href="http://luauf.com/2008/04/02/top-5-de-los-comandos-mas-utilizados/">awk</a>, <a href="http://luauf.com/2008/04/15/descargar-un-sitio-web-completo/">wget</a>, <a href="http://luauf.com/2010/02/22/reemplazar-cadenas-en-archivos-con-sed/">sed</a>)</p>
<p align="center">
<img class="aligncenter size-full wp-image-1174" title="terminal" src="http://luauf.com/wp-content/uploads/2010/04/terminal.png" alt="" width="128" height="128" />
</p>
<p><span id="more-1173"></span></p>
<p>Primero, para obtener mi IP local (privada) puedo hacerlo mediante <a href="http://luauf.com/2009/03/26/ejemplos-de-como-configurar-la-interfaz-de-red-mediante-ifconfig/">ifconfig</a>, ahora, con la ayuda de <a href="http://luauf.com/2009/05/04/varios-ejemplos-de-uso-del-comando-grep/">grep</a>, <a href="http://luauf.com/2008/04/02/top-5-de-los-comandos-mas-utilizados/">awk</a> y <a href="http://luauf.com/2009/04/12/descargar-videos-de-youtube-de-la-forma-mas-facil/">cut</a> quitaré todo lo que sobra para obtener <strong>solo</strong> la IP.</p>
<div class="syntax_hilite">
<div id="code-12">
<div class="code">ifconfig | grep <span style="color:#CC0000;">'inet:'</span>| grep -v <span style="color:#CC0000;">'127.0.0.1'</span> | cut -d: -f2 |&nbsp; awk <span style="color:#CC0000;">'{print $1}'</span></div>
</div>
</div>
<p></p>
<p>Segundo, con la ayuda de un sitio web  y <a href="http://luauf.com/2008/04/15/descargar-un-sitio-web-completo/">wget</a> obtendré mi IP pública, IP otorgada por el servidor de Internet al conectarme, por lo general es dinámica (a menos que paguemos a nuestro ISP por una IP fija). Al resultado obtenido con la ayuda de <a href="http://luauf.com/2010/02/22/reemplazar-cadenas-en-archivos-con-sed/">sed</a> le dejaré tan <strong>solo</strong> la IP.</p>
<div class="syntax_hilite">
<div id="code-13">
<div class="code">wget -q -O - checkip.<span style="">dyndns</span>.<span style="">org</span>|sed -e <span style="color:#CC0000;">'s/.*Current IP Address://'</span> -e <span style="color:#CC0000;">'s/&lt;.*$//'</span></div>
</div>
</div>
<p></p>
<p>Finalmente, el script:</p>
<div class="syntax_hilite">
<div id="code-14">
<div class="code">#!/bin/sh<br />
echo <span style="color:#CC0000;">"IP privada: "</span>$<span style="color:#006600; font-weight:bold;">&#40;</span>ifconfig | grep <span style="color:#CC0000;">'inet:'</span>| grep -v <span style="color:#CC0000;">'127.0.0.1'</span> | cut -d: -f2 | awk <span style="color:#CC0000;">'{print $1}'</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
echo <span style="color:#CC0000;">"IP pública: "</span>$<span style="color:#006600; font-weight:bold;">&#40;</span>wget -q -O - checkip.<span style="">dyndns</span>.<span style="">org</span>|sed -e <span style="color:#CC0000;">'s/.*Current IP Address://'</span> -e <span style="color:#CC0000;">'s/&lt;.*$//'</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div>
</div>
<p></p>
<p>Vía: <a href="http://belinuxmyfriend.blogspot.com/2010/04/saber-la-ip-de-red-y-publica-con-un.html">Be Linux my Friend</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/54nbYYhZPyI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/04/24/%c2%bfcomo-conocer-mi-ip-privada-y-mi-ip-publica/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://luauf.com/2010/04/24/%c2%bfcomo-conocer-mi-ip-privada-y-mi-ip-publica/</feedburner:origLink></item>
		<item>
		<title>Enviar tweets desde la terminal</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/fvg4Zh-9CXA/</link>
		<comments>http://luauf.com/2010/04/19/enviar-tweets-desde-la-terminal/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 11:00:30 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Consola]]></category>
		<category><![CDATA[cURL]]></category>
		<category><![CDATA[Terminal]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[webservice]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1170</guid>
		<description><![CDATA[Casi dos meses después de la última publicación, es necesario dar "señales de vida" del blog, que nunca fue discontinuado... pero que se mantuvo en "pausa" por falta de "inspiración"   Y para volver, que mejor que con un clásico: hacer "cosas" desde la terminal (hoy estoy muy "comillero") A las publicaciones de tiempo atrás [...]]]></description>
			<content:encoded><![CDATA[<p>Casi dos meses después de la última publicación, es necesario dar "señales de vida" del blog, que nunca fue discontinuado... pero que se mantuvo en "pausa" por falta de "inspiración" <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />   Y para volver, que mejor que con un clásico: hacer "cosas" desde la terminal (hoy estoy muy "comillero")</p>
<p>A las publicaciones de tiempo atrás de <a href="http://luauf.com/2009/10/27/centerim-mensajeria-instantanea-para-hombres/">Center IM</a>, <a href="http://luauf.com/2008/07/06/escuchando-musica-en-modo-texto-con-mp3blaster/">mp3blaster</a> y <a href="http://luauf.com/2008/06/20/navegando-en-modo-texto-con-lynx/">Lynx</a> hoy aprenderemos a enviar tweets desde la terminal utilizando cURL-</p>
<p align="center">
<img src="http://luauf.com/wp-content/uploads/2010/04/twitter.jpg" alt="" title="twitter" width="160" height="44" class="aligncenter size-full wp-image-1171" />
</p>
<p>cURL es una herramienta, que muy probablemente tengas instalado en tu GNU/Linux o BSD, que nos permite enviar a una datos a una URL utilizando los protocolos HTTP, HTTPS, FTP, FTPS, etc.</p>
<p><span id="more-1170"></span>Bien, enviar un tweet desde la terminal es realmente muy sencillo, basta copiar la siguiente línea:</p>
<p><codeline>curl -u usuario:password -d status="Mi primer tweet desde la terminal" http://twitter.com/statuses/update.xml<br />
</codeline></p>
<p>Donde:
<ul>
<li><strong>Usuario</strong>: es tu nombre de usuario</li>
<li><strong>Contraseña</strong>: es tu clave de acceso</li>
<li><strong>status</strong>: es el texto del tweet</li>
<li><a href="http://twitter.com/statuses/update.xml">http://twitter.com/statuses/update.xml</a>: es la URL de la <a href="http://apiwiki.twitter.com/Twitter-API-Documentation">API que ofrece Twitter</a> para el envio y recepción de datos. Verás que los tweets escritos de esta forma dirán debajo "hace 'tanto tiempo' via API"</li>
</ul>
<p>Algo que obviamente puede no gustarnos de esto es escribir, a la vista de todos, la contraseña por terminal y lo que puede ser peor, que quede en el histórico. Para lo segundo, podemos borrar el <a href="http://luauf.com/2008/08/19/utilizar-el-bash-history-a-fondo/">history</a> (history -c)</p>
<p>That's all folks.</p>
<p>Vía: <a href="http://120linux.com/twitter-desde-el-terminal/">120% Linux</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/fvg4Zh-9CXA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/04/19/enviar-tweets-desde-la-terminal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://luauf.com/2010/04/19/enviar-tweets-desde-la-terminal/</feedburner:origLink></item>
		<item>
		<title>Reemplazar cadenas en archivos con sed</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/9I6k0wflX6U/</link>
		<comments>http://luauf.com/2010/03/01/reemplazar-cadenas-en-archivos-con-sed/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 11:00:28 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[editor de texto]]></category>
		<category><![CDATA[filtrado de textos]]></category>
		<category><![CDATA[flujo]]></category>
		<category><![CDATA[reemplazar texto]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[transformacion de textos]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1165</guid>
		<description><![CDATA[sed es un "editor de textos" para el filtrado y la transformación de textos. Escribo "editor de texto" entre comillas pues en realidad sed no trabaja con cadenas de caracteres sino con "flujos", la diferencia con los editores de textos clásicos (interactivos) es que sed acepta como entrada estándar un archivo o cualquier otro stream; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>sed</strong> es un "editor de textos" para el filtrado y la transformación de textos. Escribo "editor de texto" entre comillas pues en realidad sed no trabaja con cadenas de caracteres sino con "flujos", la diferencia con los editores de textos clásicos (interactivos) es que <strong>sed</strong> acepta como entrada estándar un archivo o cualquier otro stream; resultado que es procesado y devuelto a la salida estándar (vea más acerca de stdin, stdout y stderr <a href="http://luauf.com/2008/06/02/el-shell-de-unix/">aquí</a>)</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/02/seda.gif"><img class="aligncenter size-thumbnail wp-image-1169" title="seda" src="http://luauf.com/wp-content/uploads/2010/02/seda-150x150.gif" alt="" width="150" height="150" /></a></p>
<p><span id="more-1165"></span>Veamos un ejemplo muy sencillito:</p>
<div class="syntax_hilite">
<div id="code-19">
<div class="code">$ cat saludo.<span style="">txt</span><br />
hola<br />
maldito<br />
mundo</div>
</div>
</div>
<p></p>
<div class="syntax_hilite">
<div id="code-20">
<div class="code">$ sed <span style="color:#CC0000;">'2d'</span> saludo.<span style="">txt</span><br />
hola<br />
mundo</div>
</div>
</div>
<p></p>
<p>No hace mucha explicación ¿no?, el <strong>comando d</strong> recibe el número de línea a eliminar. Esto es muy sencillo y es el ejemplo más básico del uso de sed; simplemente para que te vayas amigando.</p>
<p>Ahora veamos un ejemplo similar, pero reemplazando palabras:</p>
<div class="syntax_hilite">
<div id="code-21">
<div class="code">$ sed <span style="color:#CC0000;">'s/maldito/bendito/'</span> saludo.<span style="">txt</span><br />
hola<br />
bendito<br />
mundo</div>
</div>
</div>
<p></p>
<p>Ahora usamos el<strong> comando s</strong>, éste recibe una cadena a buscar y una cadena por la que se reemplazarán las coincidencias en todos sus archivos.</p>
<p>Finalmente, para cerrar esta breve introducción a sed veamos un ejemplito propuesto en <a href="http://felinfo.blogspot.com/2010/02/reemplazar-texto-en-varios-archivos.html">Feelinfo</a> ¿Cómo reemplazar textos en varios archivos en Linux?:</p>
<p>Sabiendo que "sed -i '/s/palabra-vieja/palabra-nueva/g' *.txt" reemplaza todas las ocurrencias de la palabra vieja por palabra nueva en todos los archivos:</p>
<div class="syntax_hilite">
<div id="code-22">
<div class="code">sed -i <span style="color:#CC0000;">'s/Pepe/Jose/g'</span> *.<span style="">txt</span><br />
sed -i <span style="color:#CC0000;">'s/Manolo/Manuel/g'</span> *.<span style="">txt</span><br />
sed -i <span style="color:#CC0000;">'s/Nacho/Ignacio/g'</span> *.<span style="">txt</span><br />
sed -i <span style="color:#CC0000;">'s/Inma/Inmaculada/g'</span> *.<span style="">txt</span></div>
</div>
</div>
<p></p>
<p>Bien, esto es todo por ahora. Una observación para mi como para ustedes, no nos creamos que <strong>sed</strong> se limita a solo esto... manipulando flujos podemos dominar el mundo <img src='http://luauf.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  (¿no me crees? mira este rudimentario <strong>tetris</strong> escrito con <strong>sed</strong>, <a href="http://uuner.doslash.org/forfun/sedtris.sed">sedtris.sed</a>)</p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/9I6k0wflX6U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/03/01/reemplazar-cadenas-en-archivos-con-sed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://luauf.com/2010/03/01/reemplazar-cadenas-en-archivos-con-sed/</feedburner:origLink></item>
	</channel>
</rss>

