seltxt: script para seleccionar un texto entre dos tokens

#!/bin/bash
# script para seleccionar texto entre dos tokens.
# por ratoncio
# selecc tokeninicio tokenfin ficheroseleccion
SELECCION=0
while read linea;do
    echo "$linea"|grep -q "$1"
    if [ $? -eq 0 ];then
        SELECCION=1
    fi
    if [ $SELECCION -eq 1 ];then
        echo "$linea"|grep -q "$2"
        if [ $? -eq 0 ];then
            SELECCION=0
        fi
        echo "$linea"
    fi
done < "$3"

Por ejemplo, para seleccionar una tabla dentro de un fichero html se haría así:

./seltxt "<table" "</table>" fichero.html
Anuncios

Análisis frecuencial de caracteres en un texto.

Esto lo usé hace poco para un juego de romper una criptografía muy básica.
El alfabeto básico se guarda en el fichero alf y el fichero a analizar en fich.

Generar el alfabeto:

echo {a..z}|sed 's/\ /\n/g' > alf

Genera el alfabeto básico inglés.

Sustituir letras con tilde:

cat fich|sed 's/á/a/g' > fich2;mv fich2 fich
cat fich|sed 's/Á/A/g' > fich2;mv fich2 fich

Se hace lo mismo con el resto de vocales con tilde.

Análisis frecuencial:

while read linea;do echo -en "$linea: ";cat fich|grep -io "$linea"|wc -l;done<alf

En inglés y español la letra e tiene estadísticamente el mayor número de apariciones.

Contar los espacios del texto:

cat fich| grep -o " "|wc -l

pdffontextr: Script para extraer la lista de fuentes usadas en un PDF

Cutre y funcional a partes iguales, crea un fichero acabado en font con el nombre de los originales. En este fichero están las fuentes que se usan en el documento PDF:

#!/bin/bash
# extractor de fuentes (TTF) en ficheros PDF
# por ratoncio
# vers 0.1

echo "Extractor de las fuentes usadas en ficheros TTF"
TEMP="$i$RANDOM"pdffont
SALIDA="$i"font

for i in *.pdf;do
  echo "Procesando... $i"
  strings "$i"|grep BaseFont | awk -F "/Type" '{print $1}'|awk -F "BaseFont/" '{print $2}' > "$TEMP"
  while read linea;do
    echo "$linea"|grep -q "+"
    if [ $? -eq 0 ]; then
      linea=`echo "$linea"|awk -F "+" '{print $2}'`
    fi;
    echo "$linea" >> "$SALIDA";
  done < "$TEMP" cat "$SALIDA"|sort|uniq > "$i"font;
  rm "$SALIDA" "$TEMP"
done
echo "Terminado"

ldapconv: script en bash para convertir entradas en base64 al consultar un servicio ldap

Active Directory no hace un trim de las entradas, por tanto, si en el momento de realizar una entrada queda un espacio al final de un campo de LDAP su política es convertirlo a base64. Esto hace que sea ilegible.

Este script traduce estas líneas y las deja con una indentación de 4 espacios en la línea siguiente.

#!/bin/bash
# conversor de ficheros de ldapsearch, traduce las lineas en base64
# por ratoncio
# ldapconv <ficheroorigen> <ficherodestino>
# ldapconv <ficheroorigen>

# funciones
joinLines ()
{
  while read linea;do
    echo "$linea"|grep -q ":";
    if [ $? -eq 0 ];then
      echo -ne "\n$linea";
    else
      echo -n "$linea";
    fi;
  done < "$ORIGEN"
echo -e "\n"
}

processLdap ()
{
  while read linea;do
    echo "$linea" >> "$DESTINO";
    echo "$linea"|grep -q "::";
    if [ $? -eq 0 ];then
      echo -en "   ">>"$DESTINO";
      echo "$linea"|awk '{print $2}'|base64 -d>>"$DESTINO";
      echo "">>"$DESTINO";
    fi;
  done<"$ORIGEN"
}

help ()
{
echo "SINTAXIS:";
echo "ldapconv <origen> <destino>";
echo "ldapconv <origen>";
}

# main
ORIGEN="$1";
ORIGENPROCESADO="/tmp/ldapconv"`date +%s`"-$RANDOM";
touch "$ORIGENPROCESADO";
if [ $# -eq 2 ];then
  joinLines > "$ORIGENPROCESADO";
  ORIGEN="$ORIGENPROCESADO";

  DESTINO="$2";
  > "$DESTINO"
  processLdap;
elif [ $# -eq 1 ];then
  case $1 in
    --help | -h)
      help;
      ;;
    *)
     joinLines > "$ORIGENPROCESADO";
     ORIGEN="$ORIGENPROCESADO";
     DESTINO="/dev/stdout";
     processLdap;
     ;;
  esac;
else
# sin argumentos, pero puede venir de un pipe
  readlink /proc/$$/fd/0 | grep -q "^pipe:";
  if [ $? -eq 0 ];then
    ORIGEN="/dev/stdin";
    joinLines > "$ORIGENPROCESADO";
    ORIGEN="$ORIGENPROCESADO";
    DESTINO="/dev/stdout";
    processLdap;
  else
    help;
  fi;
fi;
rm "$ORIGENPROCESADO";

Consumir un servicio web usando cURL

Se puede consumir servicios web usando cURL fácilmente de la siguiente manera:


curl -d @datos.xml -H "Content-Type: text/xml;charset=UTF-8;SOAPAction: urn:funcion_a_ejecutar" http://url_del_webservice

Donde datos.xml es un fichero xml en el que se pasan los parámetros necesarios para la operación:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ratoncio="http://url_del_webservice">
  <soapenv:Header/>
  <soapenv:Body>
    <ratoncio:funcion_a_ejecutar>
      <ratoncio:parametro1>valor1</ratoncio:parametro1>
      <ratoncio:parametro2>valor2</ratoncio:parametro2>
    </ratoncio:funcion_a_ejecutar>
  </soapenv:Body>
</soapenv:Envelope>

Filtrar PowerPoints en gmail

Este truquillo está muy  bien para filtrar correos que tengan powerpoints adjuntos (que odio con toda mi alma) sin tener que marcar como spammer al remitente. Los pasos son:

  • Habilitar la extensión de google labs: “enviar respuesta prediseñada
  • Escribir un correo nuevo y, en lugar de enviar, guardar como respuesta prediseñada.
  • Crear un filtro que contenga las palabras: filename:.pps OR filename:.ppt y marcar el checkbox “contiene archivos adjuntos“.
  • Habilitar las opciones: “Omitir Recibidos” (Archivarlo), “Aplicar la etiqueta” (para enviarlo a otra carpeta en gmail) y “Enviar respuesta prediseñada” (para responder automáticamente)

Cualquier correo que nos envíen conteniendo powerpoints será filtrado y comunicado al remitente de forma automática.