Cómo utilizar Perl para mejorar tus tareas de línea de comandos en UNIX
Perl está en todas partes. La mayoría de los sistemas UNIX vienen con él, y aquellos que no lo tienen, lo instalan rápidamente. Mac OS X también viene con Perl, y cualquier administrador de NT que se respete lo instala de inmediato.
- Perl como una opción popular para el scripting de sistemas
- Usando la opción -e para ejecutar comandos Perl en la línea de comandos
- Usando la opción -p para ejecutar comandos Perl en cada línea de entrada
- Modificando archivos directamente con la opción -i
- Utilizando las opciones -a y -F para un mayor control
Perl como una opción popular para el scripting de sistemas
La creciente disponibilidad está haciendo que Perl sea una elección cada vez más popular para el scripting de sistemas y el procesamiento de texto rutinario. Esto es especialmente cierto en el mundo UNIX, donde para la mayoría de los administradores y usuarios, trabajar con texto ASCII es una tarea diaria.
Sin embargo, los mismos usuarios que escribirían un script de tres líneas en Perl para una tarea que tienen la intención de ejecutar con frecuencia, recurren a viejas herramientas como cut, wc y sed cuando trabajan en la línea de comandos. Esto no tiene por qué ser así. Perl proporciona funcionalidades extremadamente convenientes en la línea de comandos que pueden ayudar a dejar atrás las herramientas de la línea de comandos de UNIX. La discusión a continuación asume una shell de comando UNIX bourne, ksh o csh. Todos los ejemplos de Perl son portables a NT, pero requerirán escapar de manera diferente.
Usando la opción -e para ejecutar comandos Perl en la línea de comandos
Todo comienza con la opción -e, que le indica al ejecutable de Perl que el siguiente argumento es una instrucción Perl que se debe compilar y ejecutar. El uso más sencillo es como un sustituto torpe del comando echo:
perl -e 'print "Hola mundo";'
Observa cómo fue necesario usar comillas simples para agrupar el texto posterior en un único argumento. También se podrían haber utilizado comillas dobles, pero entonces las comillas dobles dentro del comando habrían requerido escaparlas adicionalmente. El resultado de ese comando es, previsiblemente, la cadena Hola mundo.
Usando la opción -p para ejecutar comandos Perl en cada línea de entrada
Es cierto que ejecutar un solo comando de Perl una vez no es muy útil, aunque incluso una línea puede ser de gran utilidad dado el conjunto de comandos rico en características que ofrece Perl. Donde realmente destaca Perl es con la adición de la opción -p, que indica a Perl que ejecute el comando -e una vez por cada línea de entrada estándar proporcionada. Para cada una de estas ejecuciones, el valor de la línea que se está procesando se guarda en la variable tradicional $_. Después de que cada línea es filtrada a través del comando -e, se imprime en la salida estándar. La salida se omite si se utiliza la opción -n en lugar de -p.
Obtén información del sistema operativo y las unidades con el control SysInfo y FileSystemObjectEl uso más obvio para esta nueva opción es como una herramienta de búsqueda y reemplazo al estilo de sed:
perl -p -e 's/viejo/nuevo/g;'
Ese comando reemplazará todas las instancias de la cadena "viejo" en la entrada estándar con la cadena "nuevo" y enviará los resultados a la salida estándar. Para ejecutar esa búsqueda y reemplazo en un archivo de texto, usaremos un tubo y redirección de archivo de esta manera:
cat myfile | perl -p -e 's/viejo/nuevo/g;' > newfile
El contenido del archivo modificado ahora se puede encontrar en el archivo llamado newfile.
Modificando archivos directamente con la opción -i
Hasta ahora, no hemos visto nada que no se pueda hacer fácilmente utilizando las herramientas clásicas de la línea de comandos de UNIX. El comando echo maneja nuestro "Hola mundo", y sed reemplaza nuestra búsqueda y reemplazo con menos escritura. Sin embargo, Perl supera las capacidades de esos viejos amigos cuando se agrega la opción -i, que permite la edición en el lugar.
La edición en el lugar permite que Perl modifique un archivo directamente en su ubicación actual. No es necesario enviar la salida a un nuevo archivo, que probablemente solo se renombraría sobre el original. Para ejecutar nuestra sustitución viejo/nuevo en un archivo llamado myfile, solo necesitas usar el comando:
perl -i -p -e 's/viejo/nuevo/g;' myfile
La opción -i puede tomar un parámetro opcional que indica si debe crear archivos de respaldo y especifica cuál debería ser su sufijo. Además, en lugar de enumerar un solo archivo como argumento, puedes proporcionar una lista de archivos en la que el comando -e debe operar. Utilizando estos dos trucos, puedes construir un comando que ejecutará una búsqueda y reemplazo en todos los archivos de tu directorio principal y dejará copias de seguridad:
Cómo utilizar un Wiki para la documentación de proyectosfind ~ -type f | xargs perl -i.bak -p -e 's/viejo/nuevo/g;'
Utilizado de esta manera, el comando find proporciona una lista de todos los archivos en tu directorio principal y debajo de él. El comando xargs toma la entrada estándar, en este caso la lista de archivos, y la agrega al comando que le sigue inmediatamente. Omitir la extensión .bak evitará la creación de archivos de respaldo, si te encuentras en un estado de ánimo peligroso.
Utilizando las opciones -a y -F para un mayor control
El comando proporcionado usando la opción -e se ejecuta en cada línea, pero si prefieres tener granularidad a nivel de palabra, puedes agregar la opción -a, que habilita el modo de división automática. Cuando se usa con -p, la opción -a hace que Perl divida cada línea de entrada en espacios en blanco y lo guarde en el arreglo @F, como si se hubiera pasado por el comando split de Perl. Esta opción se puede utilizar fácilmente para trabajar con datos en columnas. Un script como el siguiente:
perl -i -n -a -e 'print @F[2,4];' mychart
puede parecer un poco complicado, pero es fácil de analizar cuando se examina cada parte por separado. La opción -i significa que vamos a editar el archivo especificado, mychart en este caso, directamente. -n indica que el comando especificado por -e debe ejecutarse para cada línea, pero sin imprimir nada. -a es nuestro modo de división automática, y el comando -e imprime el contenido de la tercera y quinta columnas (que se numeran a partir de cero) concatenadas juntas.
Al agregar una última opción, -F, podemos ajustar el comportamiento de la división automática para dividir las líneas en elementos de un arreglo en función de cualquier límite que se pueda especificar utilizando una expresión regular. De esta manera, un comando como este:
perl -i -n -a -F',' -e'print join ",", @F[1..$#F];' mytable
puede usarse para descartar la primera columna de una tabla de valores separados por comas (CSV). De nuevo, la opción -i es edición en el lugar. La opción -n indica a Perl que procese cada línea y no imprima nada. -a habilita la división automática, y -F le indica que divida en comas. El comando proporcionado vuelve a unir todos los datos de columna desde la columna uno hasta la última columna (un rango que excluye la columna cero) con comas y muestra el resultado.
Como ocurre con la mayoría de las cosas relacionadas con Perl, la sintaxis puede volverse un poco complicada, pero las recompensas son grandes. Cuanto más uses Perl en la línea de comandos, más fáciles se volverán las cosas. Antes de que te des cuenta, habrás olvidado los interruptores de la línea de comandos de cut. Y serás mejor por ello.
Aprovecha al máximo el encadenamiento de excepciones en Java 1.4En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Cómo utilizar Perl para mejorar tus tareas de línea de comandos en UNIX , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados