From emhnemhn at gmail.com Fri May 14 16:31:41 2010 From: emhnemhn at gmail.com (Ernesto =?ISO-8859-1?Q?Hern=E1ndez-Novich?=) Date: Fri, 14 May 2010 19:01:41 -0430 Subject: [caracas-pm] [l-linux] sustituir apostrofo x comilla In-Reply-To: <201005141211.59932.pdmp@interhoster.com> References: <201005141211.59932.pdmp@interhoster.com> Message-ID: <1273879901.2791.65.camel@deepthought.ius.cc> On Fri, 2010-05-14 at 12:11 -0430, Pedro Del Medico Piermattei wrote: > Como hago para cambiar ap?strofos (ambos) por comilla simple? > > Estoy usando lo siguiente y me reporta error: > > perl -p -i -e 's/\?/\'/g' *.txt && \ > perl -p -i -e 's/\?/\'/g' *.txt Hay dos problemas aqu?. El primero es que el \' no hace lo que tu crees que hace. La l?nea de comando que escribiste en realidad se interpreta como perl -p -i -e 's/\?/\' /g ' *.txt && perl -p -i -e ' s/\?/\ '/g' *.txt y eso va a producir varios errores en el shell y en Perl. Lo correcto ser?a haber comenzado por escribir perl -p -i -e "s/?/'/g" *.txt && perl -p -i -e "s/?/'/g" *.txt Ambas instrucciones se pueden combinar en una sola, aprovechando el combinador de uni?n de expresiones regulares quedando as? perl -p -i -e "s/?|?/'/g" *.txt sin embargo esto tampoco funcionar?a porque los "ap?strofes" que tu quieres cambiar son trigrafos UTF-8 (son acentos especiales en algunos idiomas, que uno puede usar como si fueran comillas). A menos que le digas a Perl que la entrada (y la salida) est?n en UTF-8 cuando ejecutas un one-liner se supone ASCII, as? que correrlo de esa forma genera una "sorprendente" salida en la cual cada ap?strofe se convierte en tres ' en lugar de uno (no es sorprendente si uno medita el "tri" de trigrafo). Para que puedas hacer el one-liner indicando UTF-8 perl -CIO -i -pe "s/?|?/'/g" Incidentalmente, la soluci?n de Alberto no es correcta porque no est? atacando los trigrafos sino la comilla grave (`, ASCII 103) y el ap?strofe (', ASCII 39) y eso no es lo que necesitas. Y aunque Alberto empleara los trigrafos correctos, tampoco funcionar?a porque las expresiones regulares de sed no operan sobre caracteres UTF-8 multibyte. -- Ernesto Hern?ndez-Novich - Linux 2.6.32 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't aptitude it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3