Programación

Programación (30)

Consejos para manejar texto directamente en Bash

14 Noviembre 2018 by 1 Comment Programación 39995 Views
Gaspar Fernández

Written by

Bash nos permite hacer millones de cosas. Es más, como nos permite hacer llamadas a otros programas, colocando las entradas y salidas adecuadas podremos producir cualquier resultado. Nos viene muy bien poder encadenar varios comandos, como en este tutorial en el que la salida de echo la pasamos como entrada de tr. Pero en este tutorial quiero hablar de operaciones que podemos hacer directamente en Bash, sin ningún programa extra o dependencia. Además, su realización será mucho más rápida ya que no tenemos que cargar en memoria un programa. Esto nos resultará de gran ayuda si utilizamos sistemas empotrados como Raspberry PI, o cualquier dispositivo con chips o almacenamiento reducidos.  Eso sí, para muchos ejemplos necesitaremos Bash 4.x (aunque ya tiene unos años, la versión salió en 2009)¡Manos a la obra! 1 - Reemplazar subcadenas Aunque existen herramientas como sed o awk que, no estoy diciendo que no las usemos, porque son herramientas muy potentes. Cuando se trata de hacer un simple reemplazo de un texto por otro dentro de un texto más grande. O lo que es lo mismo, reemplazar subcadenas dentro de una cadena, podemos hacer lo siguiente: [code]texto="Los mejores tutoriales sobre Windows en WindowsCenter"echo ${texto//Windows/Linux}[/code] La clave…

Información adicional

  • Nivel de dificultad Bajo
  • ¿Tutorial sacado de otra web/foro?
Leer más ...
Visto 39995 veces

Eliminar espacios en blanco en una variable Bash

06 Noviembre 2018 by 1 Comment Programación 19110 Views
En el anterior artículo contaba cómo pasar cadenas de texto a mayúsculas, a minúsculas o todas en minúsculas excepto la primera letra, que esa sí que pasaría, en caso de que no lo estuviera, a mayúsculas (por ejemplo para escribir nombres propios). Aquí dejo otra pildorita sobre tr, cómo eliminar los espacios en blanco de una variable: [code]#!/bin/bashvariable="Esto es una cadena de texto con espacios en blanco"sinespacios=$(echo "$variable" | tr -d '[[:space:]]')echo $sinespacios[/code] Al ejecutar este script, la salida será: Estoesunacadenadetextoconespaciosenblanco    

Información adicional

Leer más ...
Visto 19110 veces

Cómo pasar todas las letras a minúsculas, a mayúsculas o la primera letra en mayúscula y el resto de letras en minúsculas en Bash

06 Noviembre 2018 by 4 Comment Programación 25587 Views
Para transformar caracteres, bien para borrarlos o bien para modificarlos en GNU/Linux tenemos el comando tr, que cuenta con una serie de filtros para procesar en bloque cadenas de texto. En este artículo veremos dos de ellos: [:lower:] y [:upper:] Transformar todos los caracteres a minúsculas En la consola: [code]variable="LINUXCENTER"; echo $variable | tr '[:upper:]' '[:lower:]'[/code] que devuelve: linuxcenter Todos los carecteres que recibe tr en mayúsculas ('[:upper:]') a mayúsculas ('[:lower:]') En un script: [code]variable="LINUXCENTER"minusculas=$(echo $variable | tr '[:upper:]' '[:lower:]')[/code] Transformar todos los caracteres a mayúsculas En consola: [code]variable="linuxcenter"; echo $variable | tr '[:lower:]' '[:upper:]'[/code] Que devuelve:LINUXCENTER Ya que todos los caracteres que recibe tr en minúsculas ('[:lower:]') lo transforma en mayúsculas ([:upper:]) En un script: [code]variable="linuxcenter"mayusculas=$(echo $variable | tr '[:lower:]' '[:upper:]')[/code] Convertir la primera letra en mayúscula y el resto en minúsculas En consola: [code]variable="linuxcenter"; echo -n ${variable:0:1} | tr '[:lower:]' '[:upper:]'; echo ${variable:1} | tr '[:upper:]' '[:lower:]'[/code] Que devuelve:LinuxcenterVeamos qué hace esta línea: variable="linuxcenter"; -> Le damos un valor cualquiera a una variable.echo -n ${variable:0:1} | tr '[:lower:]' '[:upper:]'; -> -n indica a echo que no envíe el salto de línea al final de la cadena que va a mostrar. ${variable:0:1} indica que extraiga desde la posición 0…

Información adicional

Leer más ...
Visto 25587 veces

Convertir un número en base decimal a base hexadecimal y viceversa en Bash

06 Noviembre 2018 by 0 Comment Programación 7683 Views
Como ya vimos en otro artículo, si queremos operar matemáticamente en Bash más allá de las operaciones básicas necesitamos ayudarnos de bc. Una de las funcionalidades que nos ofrece bc es cambiar entre sistemas de numeración. Por ejemplo, para pasar de decimal a hexadecimal lo podemos hacer con: decimal=100 hexadecimal=$(echo "ibase=10;obase=16;$decimal" | bc) Sin embargo, para pasar de hexadecimal a decimal, no hace falta indicar la base de salida (obase), nos valdría con: hexadecimal=AA decimal=$(echo "ibase=16; $hexadecimal" | bc)

Información adicional

Leer más ...
Visto 7683 veces

Seleccionar aleatoriamente funciones en shell script Bash

05 Noviembre 2018 by 0 Comment Programación 2734 Views
Aquí traigo un truco sencillo que uso mucho y que puede ser de gran interés para otras personas que automaticen muchos procesos y quieren que parezca que no está todo automatizado. Para simular que algo está hecho a mano, pero realmente está automatizado es necesaria siempre una dosis de aleatoriedad. Y una forma interesante de aleatorizar los procesos automáticos es seleccionar de forma aleatoria las funciones que realizan tareas. Para ello necesitamos tener las funciones almacenadas en un fichero distinto al script que las ejecuta e invocarla a través de: . $bibliotecafuncionesY seleccionar la función a usar con: funcionausar=$(grep function $bibliotecafunciones | cut -d " " -f 2 | shuf -n1 | sed 's/()//') Con esto lo que hacemos es meter en la variable funcionausar el resultado de grep function $bibliotecafunciones | cut -d " " -f 2 | shuf -n1 | sed 's/()//'. Veamos qué hace cada parte de esta línea: grep function $bibliotecafunciones -> Busca la cadena de texto function en el fichero cuyo nombre está almacenado en la variable $bibliotecafunciones cut -d " " -f 2 -> Extrae la segunda columna (-f 2) de la cadena que ha recibido siendo los separadores entre columnas el espacio en…

Información adicional

Leer más ...
Visto 2734 veces

Recorrer un directorio que tiene ficheros con espacios en blanco en el nombre en un script

04 Noviembre 2018 by 2 Comment Programación 15924 Views
Cuando recorremos un directorio con ficheros cuyo nombre puede que contenga espacios en blanco (algo muy habitual si descargamos vídeos con youtube-dl), no funciona el típico: #!/bin/bashdirectorio="midirectorio"for i in $(ls $directorio)do    echo $idone   Ni siquiera serviría entrecomillar el $i, ya que no le llegaría el nombre del fichero al recortarse en el for. La solución es cambiar antes de hacer el for el separador de campo con: IFS='' Quedando el script así: #!/bin/bashdirectorio="midirectorio"IFS=''for i in $(ls $directorio)do    echo $idone   Guardad este artículo en favoritos. Es una de esas piedras en las que todos tropezamos una y otra vez. A menos yo. Pero ya tengo la chuleta y así ya no tendré que mirar una y otra vez scripts antiguos.    

Información adicional

Leer más ...
Visto 15924 veces

Head y tail, mostrar los primeros y últimos elementos de una lista

02 Noviembre 2018 by 0 Comment Programación 23378 Views
En GNU/Linux tenemos dos comandos que suelen ir de la mano que permiten extraer los primeros y últimos elementos de un listado. Su uso más habitual es extraer las primeras líneas de un fichero con head o las últimas con tail. Veamos un ejemplo sencillo sobre un fichero de texto con "Un soneto me manda hacer Violante" de Lope de Vega: head violante.txt Un soneto me manda hacer Violanteque en mi vida me he visto en tanto aprieto;catorce versos dicen que es soneto;burla burlando van los tres delante.Yo pensé que no hallara consonante,y estoy a la mitad de otro cuarteto;mas si me veo en el primer terceto,no hay cosa en los cuartetos que me espante. tail violante.txt mas si me veo en el primer terceto,no hay cosa en los cuartetos que me espante.Por el primer terceto voy entrando,y parece que entré con pie derecho,pues fin con este verso le voy dando.Ya estoy en el segundo, y aun sospechoque voy los trece versos acabando;contad si son catorce, y está hecho. Por defecto y sin pasarle ningún argumento más que el fichero a listar, tanto tail como head muestran diez líneas. Head las diez primeras líneas, tail las diez últimas líneas. Pero…

Información adicional

Leer más ...
Visto 23378 veces

Head y tail, mostrar los primeros y últimos elementos de una lista

02 Noviembre 2018 by 0 Comment Programación 8638 Views
En GNU/Linux tenemos dos comandos que suelen ir de la mano que permiten extraer los primeros y últimos elementos de un listado. Su uso más habitual es extraer las primeras líneas de un fichero con head o las últimas con tail. Veamos un ejemplo sencillo sobre un fichero de texto con "Un soneto me manda hacer Violante" de Lope de Vega: head violante.txt Un soneto me manda hacer Violanteque en mi vida me he visto en tanto aprieto;catorce versos dicen que es soneto;burla burlando van los tres delante.Yo pensé que no hallara consonante,y estoy a la mitad de otro cuarteto;mas si me veo en el primer terceto,no hay cosa en los cuartetos que me espante. tail violante.txt mas si me veo en el primer terceto,no hay cosa en los cuartetos que me espante.Por el primer terceto voy entrando,y parece que entré con pie derecho,pues fin con este verso le voy dando.Ya estoy en el segundo, y aun sospechoque voy los trece versos acabando;contad si son catorce, y está hecho. Por defecto y sin pasarle ningún argumento más que el fichero a listar, tanto tail como head muestran diez líneas. Head las diez primeras líneas, tail las diez últimas líneas. Pero…

Información adicional

Leer más ...
Visto 8638 veces

Comparar numeros decimales para saber cuál es mayor en Bash

02 Noviembre 2018 by 0 Comment Programación 8996 Views
Ya hemos visto que operar con decimales en Bash no es imposible, aunque es farragoso. Ahora veremos que pasa lo mismo para comparar decimales. Pero lo explico y dejo una función para que quien tenga que comparar, la copie en su script. Primero comprobaremos si le hemos pasado bien los parámetros $1 y $2 a la función. Comprobamos si existen y tienen contenido. Si esto ocurre, comprobaremos que realmente son números que opcionalmente tienen un punto. En caso de que sólo hubiera una variable numérica, se devuelve esa, ya que esa será la mayor. Si las variables no fueran numéricas, se devuelve -1 de error. Si ambas variables son nuḿéricas, se dividen en la parte entera y la parte decimal. Es decir, se extrae la subcadena desde el inicio hasta el punto, que es la parte entera, y la subcadena desde el punto hasta el fina, que es la parte decimal. Comparamos las partes enteras. Si las partes enteras son distintas, el número mayor es el que tenga la parte entera mayor. En caso de que las partes enteras sean iguales, seguimos haciendo comprobaciones: Como recortamos subcadenas, igualamos su longitud con ceros al final de la subcadena más corta. Para…

Información adicional

Leer más ...
Visto 8996 veces

Saber si una variable existe y tiene un valor distinto a vacío en Bash

01 Noviembre 2018 by 1 Comment Programación 34335 Views
Para saber si una variable existe y está inicializada con un valor distinto a vacío, es decir, que no se ha inicializado con: variable="" Lo podemos comprobar con [ "$variable" ] Veamos un ejemplo y vamos a ir evolucionándolo para ver sus posibilidades: #!/bin/bashif [ "$variable" ]then     echo "La variable existe y no está vacía"else    echo "La variable no existe o está vacía"fi Devuelve: La variable no existe o está vacía Ahora vamos a probar con la variable inicializada vacía: #!/bin/bash variable=""if [ "$variable" ]then     echo "La variable existe y no está vacía"else    echo "La variable no existe o está vacía"fi Y nos vuelve a dar: La variable no existe o está vacía Así que vamos a dar un valor. En un alarde de imaginación, a la variable variable le voy a dar un valor de valor: #!/bin/bash variable="valor"if [ "$variable" ]then     echo "La variable existe y no está vacía"else    echo "La variable no existe o está vacía"fi Y al ejecutarlo, devuelve: La variable existe y no está vacíaPara comprobar que no está vacía, lo que podemos hacer es comprobar si existe. Si existe y no contiene nada es que su valor es "". Esto lo haremos…

Información adicional

Leer más ...
Visto 34335 veces

División con decimales en Bash

01 Noviembre 2018 by 0 Comment Programación 36055 Views
Para hacer operaciones sencillas en Bash podemos usar let, pero únicamente operaciones muy sencillas. Veamos un ejemplo: #!/bin/bashlet operador1=3let operador2=2let suma=$operador1+$operador2let resta=$operador1-$operador2let multiplicacion=$operador1*$operador2let division=$operador1/$operador2let modulo=$operador1%$operador2echo "La suma de "$operador1" + "$operador2" es "$sumaecho "La diferencia de "$operador1" + "$operador2" es "$restaecho "El producto de "$operador1" x "$operador2" es "$multiplicacionecho "El cociente de "$operador1" / "$operador2" es "$divisionecho "El resto de "$operador1" / "$operador2" es "$modulo   Al ejecutarlo nos da este resultado: La suma de 3 + 2 es 5La diferencia de 3 + 2 es 1El producto de 3 + 2 es 6El cociente de 3 / 2 es 1El resto de 3 / 2 es 1 Ufffff... ¡Pi es 3 exactamente! No, no, que no te de un infarto, que pi no es 3. Y en Bash podemos calcularlo sin estos sobresaltos. Aunque no lo haremos con let, sino con bc. De hecho, podemos indicar cuántos decimales queremos a través de scale. Veamos una aproximación a pi: echo "scale=2; 355/113" | bc3.14 Y con cuatro decimales: echo "scale=4; 355/113" | bc3.1415 Y con seis decimales: echo "scale=6; 355/113" | bc3.141592 Como se puede comprobar, esta división se aproxima a pi, pero el binomio bc/scale no redondean, únicamente cortan…

Información adicional

Leer más ...
Visto 36055 veces

Trabajar con fechas en Bash

13 Septiembre 2018 by 0 Comment Programación 10792 Views
Para trabajar con fechas y con horas en un script, o en la consola, tenemos el comando date. Veamos su uso y algunos de sus parámetros más usuales. Si únicamente escribimos date, nos devuelve el día de la semana indicado con tres caracteres; el mes, indicado de nuevo con tres caracteres; la hora completa con hora, minutos y segundos; el huso horario de nuestro ordenador y el año actual. Parámetros usuales: date +%H -> indica la hora (sin minutos) actual date +%M -> indica los minutos actuales date +%H:%M -> indica la hora y minutos actuales date +%d -> indica qué día del mes es hoydate +%m -> indica el mes actual en número date +%B -> indica el mes actual en letras, con la palabra completa date +%Y -> indica el año actual Ejemplo: echo "Hoy es el "$(date +%D)" de "$(date +%B)" de "$(date +%y) Truco para usar date Puede que te preguntes si te tienes que aprender todas esas opciones para hacer un uso eficaz de date. No. No hace falta. GNU/Linux es un sistema que permite optimizar todos los recursos... incluída la memoria de los usuarios. Con un sencillo script, podemos indicarle a un array que…

Información adicional

  • Nivel de dificultad Bajo
  • ¿Tutorial sacado de otra web/foro? No
Leer más ...
Visto 10792 veces

Descargar todos los tuits de un usuario de Twitter

13 Septiembre 2018 by 0 Comment Programación 4881 Views
Podemos descargar en nuestro ordenador todos los tuits de un usuario de Twitter pinchando uno a uno, dándole botón derecho y guardando la página... o haciendo un pequeño script.  Veamos paso a paso cómo hacerlo: Acotar la búsqueda Vamos a usar la cuenta de @LinuxCenterEs como ejemplo, así que vamos a mirar cuándo se unió a twitter, a qué fecha estamos y usaremos esos dos datos para delimitar el rango temporal desde donde hay que descargar. Para saber la fecha actual, usaremos date. Para saber la fecha en la que se unió un usuario a Twitter, tenemos que mirar en el código fuente. Para saber qué cadena buscamos, vamos a mirar primero la fecha en el perfil del usuario:   Después buscamos esa cadena en el código fuente y miramos a qué clase o div pertenece:   Y comprobamos si esa clase se utiliza únicamente para ese dato: Ya tenemos la pista con la que extraer la cadena de la fecha en la que se unió el usuario a Twitter. Ahora tenemos que descargar la página, buscar la línea y extraer únicamente la cadena: #!/bin/bashwget https://twitter.com/$1 -O $1.htmllineafecha=$(cat $i.html | grep "ProfileHeaderCard-joinDateText js-tooltip u-dir")echo $lineafecha   Voy a comprobar si…

Información adicional

  • Nivel de dificultad Medio
  • ¿Tutorial sacado de otra web/foro? No
Leer más ...
Visto 4881 veces

Generar números aleatoriamente con shuf

12 Septiembre 2018 by 0 Comment Programación 6003 Views
Ya hemos visto que, dado que %$valor lo que hace es calcular el resto de la división entre la cifra que precede a % (dividendo) y la cifra que sucede a % (divisor), $RANDOM%limitesuperior no vale para generar números aleatorios de forma fideligna (a no ser que seamos trileros, pero en este caso no buscamos una verdadera aleatoriedad). También hemos visto que shuf sí que sirve para crear órdenes aleatorios. Y ahora vamos a ver cómo usar shuf para generar números aleatorios. Lanzamiento a cara o cruz de una moneda (aleatoriedad entre dos valores) Veamos cómo usar shuf en el primer ejemplo que usé en contra de $RANDOM: una aleatoriedad dos valores. Pero antes de ello, vuelvo a remarcar que shuf no genera nada, sino que hace un orden aleatorio de una lista. Así que primero hay que generar una lista y luego ordenar aleatoriamente con shuf. ¿Qué formas podemos generar una lista? Veamos varias formas de hacerlo: En un fichero auxiliar: #/bin/bashlet comienzo=0let final=1for i in $(seq $comienzo $final)do    echo $i >> numeros.txtdone Y ahora podemos ejecutarlo y luego ordenar con shuf. Veamos a ver si la aleatoriedad es tal:   En este pantallazo vemos que de 12 tiradas,…

Información adicional

  • Nivel de dificultad Medio
  • ¿Tutorial sacado de otra web/foro? No
Leer más ...
Visto 6003 veces
Página 1 de 2

¡Atención! Este sitio usa cookies y tecnologías similares.

Si no cambia la configuración de su navegador, usted acepta su uso. Saber más

Acepto

Vea nuestra política de cookies y enlaces de interés aquí